提交 e4714fbd 编写于 作者: R roo00

test

tests
上级 99e02490
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/main/resources"/>
<classpathentry kind="src" path="src/test/java"/>
<classpathentry kind="src" path="src/test/resources"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/commons/lang3/commons-lang3-3.4.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/commons/collections4/commons-collections4-4.1.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/commons/beanutils/commons-beanutils-1.8.3.jar" sourcepath="D:/O2/code/lib/apache/commons/beanutils/commons-beanutils-1.8.3-sources.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/google/gson/gson-2.8.5.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/commons/io/commons-io-2.6.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/commons/codec/commons-codec-1.8.jar" sourcepath="D:/O2/code/lib/apache/commons/codec/commons-codec-1.8-sources.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/ehcache/ehcache-2.10.3.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/ant/ant.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/ant/ant-launcher.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/tomcat/catalina.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/tomcat/catalina-ant.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/tomcat/tomcat-util.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/cargo/cargo-core-uberjar-1.5.0.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/sourceforge/dom4j/dom4j-1.6.1.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="lib" path="D:/O2/code/lib/ibm/informix/ifxjdbc.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/ibm/informix/ifxjdbcx.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/mysql/mysql-connector-java-5.1.36-bin.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/postgresql/postgresql-9.4-1205.jdbc42.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/eclipse/jetty/jetty-all-9.3.17.RC0-uber.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/github/jcl/jcl-core-2.7.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/slf4j/slf4j-api-1.7.25.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/commons/vfs/commons-vfs2-2.1.jar" sourcepath="D:/OpenSource/commons-vfs2"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/poi/curvesapi-1.05.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/poi/xmlbeans-3.0.1.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/h2/h2-1.4.193.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/jpinyin/jpinyin-1.1.8.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/ibm/db2/db2jcc_license_cu-10.1.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/ibm/db2/db2jcc4-10.1.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/oracle/ojdbc14_g-10.2.0.4.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/openjpa/openjpa-3.0.0-SNAPSHOT.jar" sourcepath="D:/OpenSource/openjpa"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/commons/fileupload/commons-fileupload-1.3.1.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/commons/net/commons-net-3.6.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/jersey/hk2-api-2.5.0-b03.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/jersey/hk2-locator-2.5.0-b03.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/jersey/hk2-utils-2.5.0-b03.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/jersey/jersey-media-multipart-2.25.1.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/openjpa/commons-collections-3.2.2.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/github/fast-classpath-scanner/fast-classpath-scanner-2.4.5.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/commons/logging/commons-logging-1.2.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/commons/logging/commons-logging-1.2-javadoc.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/jersey/jersey-server-2.25.1.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/jersey/jersey-client-2.25.1.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/jersey/jersey-common-2.25.1.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/jersey/jersey-container-servlet-2.25.1.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/jersey/jersey-container-servlet-core-2.25.1.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/jersey/jersey-guava-2.25.1.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/alibaba/druid/druid-1.1.8.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/quartz/quartz-2.3.0.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/javax/javaee-api-7.0.jar" sourcepath="D:/OpenSource/openjpa"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/poi/poi-3.17.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/poi/poi-examples-3.17.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/poi/poi-excelant-3.17.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/poi/poi-ooxml-3.17.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/poi/poi-scratchpad-3.17.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/tess4j/tess4j-3.4.8.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/tess4j/jna-4.1.0.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/tess4j/jul-to-slf4j-1.7.25.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/pdfbox/fontbox-2.0.11.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/pdfbox/jempbox-1.8.15.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/pdfbox/pdfbox-2.0.11.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/pdfbox/pdfbox-tools-2.0.11.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/pdfbox/preflight-2.0.11.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/pdfbox/xmpbox-2.0.11.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/tess4j/lept4j-1.6.4.jar"/>
<classpathentry kind="lib" path="D:/O2/code/lib/apache/poi/ooxml-schemas-1.4.jar"/>
<classpathentry kind="output" path="classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AntConfiguration">
<buildFile url="file://$PROJECT_DIR$/x_base_core_project_build.xml" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager">
<output url="file://$PROJECT_DIR$/out" />
</component>
<component name="SvnBranchConfigurationManager">
<option name="mySupportsUserInfoFilter" value="true" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/src/main/main.iml" filepath="$PROJECT_DIR$/src/main/main.iml" />
<module fileurl="file://$PROJECT_DIR$/src/test/test.iml" filepath="$PROJECT_DIR$/src/test/test.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="svn" />
<mapping directory="" vcs="svn" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" readonly="true" id="009cb93f-8281-44fb-bc75-63df0379d743" name="Default" comment="" />
<ignored path="$PROJECT_DIR$/out/" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="TRACKING_ENABLED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FileEditorManager">
<leaf>
<file leaf-file-name="x_base_core_project_build.xml" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/x_base_core_project_build.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="399">
<caret line="21" column="10" lean-forward="true" selection-start-line="21" selection-start-column="10" selection-end-line="21" selection-end-column="10" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="JsonElementConvertToWrapInException.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/x/base/core/exception/JsonElementConvertToWrapInException.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="190">
<caret line="10" column="0" lean-forward="true" selection-start-line="10" selection-start-column="0" selection-end-line="10" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="RunningException.java" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/main/java/com/x/base/core/exception/RunningException.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="76">
<caret line="4" column="13" lean-forward="false" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" />
<folding />
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="GradleLocalSettings">
<option name="externalProjectsViewState">
<projects_view />
</option>
</component>
<component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="293" />
<option name="y" value="40" />
<option name="width" value="1400" />
<option name="height" value="1000" />
</component>
<component name="ProjectView">
<navigator currentView="ProjectPane" proportions="" version="1">
<flattenPackages />
<showMembers />
<showModules />
<showLibraryContents />
<hideEmptyPackages />
<abbreviatePackageNames />
<autoscrollToSource />
<autoscrollFromSource />
<sortByType />
<manualOrder />
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="PackagesPane" />
<pane id="AndroidView" />
<pane id="Scope" />
<pane id="ProjectPane">
<subPane>
<expand>
<path>
<item name="x_base_core_project" type="b2602c69:ProjectViewProjectNode" />
<item name="main" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="x_base_core_project" type="b2602c69:ProjectViewProjectNode" />
<item name="main" type="462c0819:PsiDirectoryNode" />
<item name="java" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="x_base_core_project" type="b2602c69:ProjectViewProjectNode" />
<item name="main" type="462c0819:PsiDirectoryNode" />
<item name="java" type="462c0819:PsiDirectoryNode" />
<item name="core" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="x_base_core_project" type="b2602c69:ProjectViewProjectNode" />
<item name="main" type="462c0819:PsiDirectoryNode" />
<item name="java" type="462c0819:PsiDirectoryNode" />
<item name="core" type="462c0819:PsiDirectoryNode" />
<item name="exception" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
<pane id="Scratches" />
</panes>
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="RunManager">
<configuration default="true" type="Applet" factoryName="Applet">
<option name="HTML_USED" value="false" />
<option name="WIDTH" value="400" />
<option name="HEIGHT" value="300" />
<option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
<module />
</configuration>
<configuration default="true" type="Application" factoryName="Application">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<option name="MAIN_CLASS_NAME" />
<option name="VM_PARAMETERS" />
<option name="PROGRAM_PARAMETERS" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="ENABLE_SWING_INSPECTOR" value="false" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<module name="" />
<envs />
</configuration>
<configuration default="true" type="JUnit" factoryName="JUnit">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<module name="" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="PACKAGE_NAME" />
<option name="MAIN_CLASS_NAME" />
<option name="METHOD_NAME" />
<option name="TEST_OBJECT" value="class" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" />
<option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="singleModule" />
</option>
<envs />
<patterns />
</configuration>
<configuration default="true" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" factoryName="Plugin">
<module name="" />
<option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m -ea" />
<option name="PROGRAM_PARAMETERS" />
<predefined_log_file id="idea.log" enabled="true" />
</configuration>
<configuration default="true" type="Remote" factoryName="Remote">
<option name="USE_SOCKET_TRANSPORT" value="true" />
<option name="SERVER_MODE" value="false" />
<option name="SHMEM_ADDRESS" value="javadebug" />
<option name="HOST" value="localhost" />
<option name="PORT" value="5005" />
</configuration>
<configuration default="true" type="TestNG" factoryName="TestNG">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<module name="" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="SUITE_NAME" />
<option name="PACKAGE_NAME" />
<option name="MAIN_CLASS_NAME" />
<option name="METHOD_NAME" />
<option name="GROUP_NAME" />
<option name="TEST_OBJECT" value="CLASS" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" />
<option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
<option name="OUTPUT_DIRECTORY" />
<option name="ANNOTATION_TYPE" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="singleModule" />
</option>
<option name="USE_DEFAULT_REPORTERS" value="false" />
<option name="PROPERTIES_FILE" />
<envs />
<properties />
<listeners />
</configuration>
</component>
<component name="ShelveChangesManager" show_recycled="false">
<option name="remove_strategy" value="false" />
</component>
<component name="SvnConfiguration" cleanupOnStartRun="true">
<configuration>C:\Users\Rui\AppData\Roaming\Subversion</configuration>
<supportedVersion>125</supportedVersion>
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="009cb93f-8281-44fb-bc75-63df0379d743" name="Default" comment="" />
<created>1506502721093</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1506502721093</updated>
</task>
<servers />
</component>
<component name="ToolWindowManager">
<frame x="58" y="-8" width="1870" height="1096" extended-state="6" />
<layout>
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Palette&#9;" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.18662351" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.24973032" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
</layout>
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager />
<watches-manager />
</component>
<component name="antWorkspaceConfiguration">
<option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
<option name="FILTER_TARGETS" value="false" />
<buildFile url="file://$PROJECT_DIR$/x_base_core_project_build.xml">
<expanded value="true" />
</buildFile>
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/x_base_core_project_build.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="399">
<caret line="21" column="10" lean-forward="true" selection-start-line="21" selection-start-column="10" selection-end-line="21" selection-end-column="10" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/x/base/core/exception/JsonElementConvertToWrapInException.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="190">
<caret line="10" column="0" lean-forward="true" selection-start-line="10" selection-start-column="0" selection-end-line="10" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/x/base/core/Crypto.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="76">
<caret line="17" column="13" lean-forward="false" selection-start-line="17" selection-start-column="13" selection-end-line="17" selection-end-column="13" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/x/base/core/exception/RunningException.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="76">
<caret line="4" column="13" lean-forward="false" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" />
<folding />
</state>
</provider>
</entry>
</component>
<component name="masterDetails">
<states>
<state key="ProjectJDKs.UI">
<settings>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
</states>
</component>
</project>
\ No newline at end of file
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.8
package com.x.base.core.container;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import javax.persistence.EntityManager;
import javax.persistence.FlushModeType;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.entity.JpaObject;
public abstract class EntityManagerContainerBasic implements AutoCloseable {
protected EntityManagerContainerBasic(EntityManagerContainerFactory entityManagerContainerFactory) {
this.entityManagerContainerFactory = entityManagerContainerFactory;
this.persistChecker = new PersistChecker(this);
this.removeChecker = new RemoveChecker(this);
}
protected PersistChecker persistChecker;
protected RemoveChecker removeChecker;
protected EntityManagerContainerFactory entityManagerContainerFactory;
protected Map<Class<? extends JpaObject>, EntityManager> entityManagerMap = new ConcurrentHashMap<Class<? extends JpaObject>, EntityManager>();
public <T extends JpaObject> EntityManager get(Class<T> cls) throws Exception {
Class<T> clazz = (Class<T>) entityManagerContainerFactory.assignableFrom(cls);
EntityManager em = fromEntityManagers(clazz);
if (null == em) {
em = entityManagerContainerFactory.createEntityManager(clazz);
em.setFlushMode(FlushModeType.COMMIT);
entityManagerMap.put(cls, em);
}
return em;
}
public <T extends JpaObject> EntityManager beginTransaction(Class<T> cls) throws Exception {
EntityManager em = get(cls);
if (!em.getTransaction().isActive()) {
em.getTransaction().begin();
}
return em;
}
private EntityManager fromEntityManagers(Class<?> cls) {
EntityManager em = entityManagerMap.get(cls);
if ((null != em) && em.isOpen()) {
return em;
}
return null;
}
public void rollback() {
for (EntityManager em : entityManagerMap.values()) {
if ((null != em) && em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
}
}
public void close() {
for (EntityManager em : entityManagerMap.values()) {
if (null != em && em.isOpen()) {
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
em.close();
}
}
}
protected FieldType getFieldType(Field field) throws Exception {
if (field.getType().isAssignableFrom(String.class)) {
return FieldType.stringValue;
}
if (field.getType().isAssignableFrom(Integer.class)) {
return FieldType.integerValue;
}
if (field.getType().isAssignableFrom(Double.class)) {
return FieldType.doubleValue;
}
if (field.getType().isAssignableFrom(Long.class)) {
return FieldType.longValue;
}
if (field.getType().isAssignableFrom(Float.class)) {
return FieldType.floatValue;
}
if (field.getType().isAssignableFrom(Date.class)) {
return FieldType.dateValue;
}
if (field.getType().isAssignableFrom(Boolean.class)) {
return FieldType.booleanValue;
}
if (field.getType().isAssignableFrom((new byte[] {}).getClass())) {
return FieldType.byteValueArray;
}
if (List.class.isAssignableFrom(field.getType())) {
ParameterizedType parameterized = (ParameterizedType) field.getGenericType();
Class<?> actualClass = (Class<?>) parameterized.getActualTypeArguments()[0];
if (String.class.isAssignableFrom(actualClass)) {
return FieldType.stringValueList;
}
if (Integer.class.isAssignableFrom(actualClass)) {
return FieldType.integerValueList;
}
if (Double.class.isAssignableFrom(actualClass)) {
return FieldType.doubleValueList;
}
if (Long.class.isAssignableFrom(actualClass)) {
return FieldType.longValueList;
}
if (Float.class.isAssignableFrom(actualClass)) {
return FieldType.floatValueList;
}
if (Date.class.isAssignableFrom(actualClass)) {
return FieldType.dateValueList;
}
if (Boolean.class.isAssignableFrom(actualClass)) {
return FieldType.booleanValueList;
}
}
if (field.getType().isEnum()){
return FieldType.enumValue;
}
throw new Exception("unknow filed type{name:" + field.getName() + "}.");
}
}
\ No newline at end of file
package com.x.base.core.container;
import java.util.List;
import java.util.Random;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.openjpa.slice.DistributionPolicy;
import com.x.base.core.entity.SliceJpaObject;
public class FactorDistributionPolicy implements DistributionPolicy {
private Random random = new Random();
public String distribute(Object pc, List<String> slices, Object context) {
try {
Object o = PropertyUtils.getProperty(pc, SliceJpaObject.distributeFactor_FIELDNAME);
Integer factor = null;
if (null == o) {
factor = random.nextInt(1000);
PropertyUtils.setProperty(pc, SliceJpaObject.distributeFactor_FIELDNAME, factor);
} else {
factor = (Integer) o;
}
return slices.get(factor % slices.size());
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
\ No newline at end of file
package com.x.base.core.container;
public enum FieldType {
/* string */
stringValue, stringValueList,
/* boolean */
booleanValue, booleanValueList,
/* integer */
integerValue, integerValueList,
/* double */
doubleValue, doubleValueList,
/* long */
longValue, longValueList,
/* float */
floatValue, floatValueList,
/* date */
dateValue, dateValueList,
/* byte */
byteValueArray,
/* enum */
enumValue;
}
package com.x.base.core.container;
public enum LogLevel {
FATAL, ERROR, WARN, INFO, TRACE
}
package com.x.base.core.container;
import com.x.base.core.container.checker.BooleanValueListPersistChecker;
import com.x.base.core.container.checker.BooleanValuePersistChecker;
import com.x.base.core.container.checker.ByteValueArrayPersistChecker;
import com.x.base.core.container.checker.DateValueListPersistChecker;
import com.x.base.core.container.checker.DateValuePersistChecker;
import com.x.base.core.container.checker.DoubleValueListPersistChecker;
import com.x.base.core.container.checker.DoubleValuePersistChecker;
import com.x.base.core.container.checker.FloatValueListPersistChecker;
import com.x.base.core.container.checker.FloatValuePersistChecker;
import com.x.base.core.container.checker.IntegerValueListPersistChecker;
import com.x.base.core.container.checker.IntegerValuePersistChecker;
import com.x.base.core.container.checker.LongValueListPersistChecker;
import com.x.base.core.container.checker.LongValuePersistChecker;
import com.x.base.core.container.checker.StringValueListPersistChecker;
import com.x.base.core.container.checker.StringValuePersistChecker;
public class PersistChecker {
public PersistChecker(EntityManagerContainerBasic emc) {
this.stringValue = new StringValuePersistChecker(emc);
this.stringValueList = new StringValueListPersistChecker(emc);
this.booleanValue = new BooleanValuePersistChecker(emc);
this.booleanValueList = new BooleanValueListPersistChecker(emc);
this.dateValue = new DateValuePersistChecker(emc);
this.dateValueList = new DateValueListPersistChecker(emc);
this.integerValue = new IntegerValuePersistChecker(emc);
this.integerValueList = new IntegerValueListPersistChecker(emc);
this.doubleValue = new DoubleValuePersistChecker(emc);
this.doubleValueList = new DoubleValueListPersistChecker(emc);
this.longValue = new LongValuePersistChecker(emc);
this.longValueList = new LongValueListPersistChecker(emc);
this.floatValue = new FloatValuePersistChecker(emc);
this.floatValueList = new FloatValueListPersistChecker(emc);
this.byteValueArray = new ByteValueArrayPersistChecker(emc);
}
public StringValuePersistChecker stringValue;
public StringValueListPersistChecker stringValueList;
public BooleanValuePersistChecker booleanValue;
public BooleanValueListPersistChecker booleanValueList;
public DateValuePersistChecker dateValue;
public DateValueListPersistChecker dateValueList;
public IntegerValuePersistChecker integerValue;
public IntegerValueListPersistChecker integerValueList;
public DoubleValuePersistChecker doubleValue;
public DoubleValueListPersistChecker doubleValueList;
public LongValuePersistChecker longValue;
public LongValueListPersistChecker longValueList;
public FloatValuePersistChecker floatValue;
public FloatValueListPersistChecker floatValueList;
public ByteValueArrayPersistChecker byteValueArray;
}
package com.x.base.core.container;
import com.x.base.core.container.checker.StringValueListRemoveChecker;
import com.x.base.core.container.checker.StringValueRemoveChecker;
public class RemoveChecker {
public RemoveChecker(EntityManagerContainerBasic emc) {
this.stringValue = new StringValueRemoveChecker(emc);
this.stringValueList = new StringValueListRemoveChecker(emc);
}
public StringValueRemoveChecker stringValue;
public StringValueListRemoveChecker stringValueList;
}
package com.x.base.core.container.checker;
import com.x.base.core.container.EntityManagerContainerBasic;
public abstract class AbstractChecker {
protected AbstractChecker(EntityManagerContainerBasic emc) {
this.emc = emc;
}
protected EntityManagerContainerBasic emc;
}
package com.x.base.core.container.checker;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Objects;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.container.EntityManagerContainerBasic;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckPersist;
import com.x.base.core.entity.annotation.CheckPersistType;
import com.x.base.core.project.tools.ListTools;
public class BooleanValueListPersistChecker extends AbstractChecker {
public BooleanValueListPersistChecker(EntityManagerContainerBasic emc) {
super(emc);
}
public void check(Field field, List<Boolean> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (Objects.equals(checkPersistType, CheckPersistType.all)
|| Objects.equals(checkPersistType, CheckPersistType.baseOnly)) {
this.allowEmpty(field, values, jpa, checkPersist, checkPersistType);
this.allowContainEmpty(field, values, jpa, checkPersist, checkPersistType);
}
}
private void allowEmpty(Field field, List<Boolean> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if ((!checkPersist.allowEmpty()) && (ListTools.nullToEmpty(values).isEmpty())) {
throw new Exception("check persist booleanValueList allowEmpty error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not be null or empty.");
}
}
private void allowContainEmpty(Field field, List<Boolean> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (!checkPersist.allowContainEmpty()) {
for (Boolean o : ListTools.nullToEmpty(values)) {
if (null == o) {
throw new Exception("check persist booleanValueList allowContainEmpty error, class:"
+ jpa.getClass().getName() + ", field:" + field.getName() + ",values:"
+ StringUtils.join(values, ",") + " can not contain null.");
}
}
}
}
}
\ No newline at end of file
package com.x.base.core.container.checker;
import java.lang.reflect.Field;
import java.util.Objects;
import com.x.base.core.container.EntityManagerContainerBasic;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckPersist;
import com.x.base.core.entity.annotation.CheckPersistType;
public class BooleanValuePersistChecker extends AbstractChecker {
public BooleanValuePersistChecker(EntityManagerContainerBasic emc) {
super(emc);
}
public void check(Field field, Boolean value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (Objects.equals(checkPersistType, CheckPersistType.all)
|| Objects.equals(checkPersistType, CheckPersistType.baseOnly)) {
this.allowEmpty(field, value, jpa, checkPersist, checkPersistType);
}
}
private void allowEmpty(Field field, Boolean value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if ((!checkPersist.allowEmpty()) && (value == null)) {
throw new Exception("check persist booleanValue allowEmpty error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not be null.");
}
}
}
\ No newline at end of file
package com.x.base.core.container.checker;
import java.lang.reflect.Field;
import java.util.Objects;
import com.x.base.core.container.EntityManagerContainerBasic;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckPersist;
import com.x.base.core.entity.annotation.CheckPersistType;
public class ByteValueArrayPersistChecker extends AbstractChecker {
public ByteValueArrayPersistChecker(EntityManagerContainerBasic emc) {
super(emc);
}
public void check(Field field, byte[] values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (Objects.equals(checkPersistType, CheckPersistType.all)
|| Objects.equals(checkPersistType, CheckPersistType.baseOnly)) {
this.allowEmpty(field, values, jpa, checkPersist, checkPersistType);
}
}
private void allowEmpty(Field field, byte[] values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if ((!checkPersist.allowEmpty()) && (values == null || values.length == 0)) {
throw new Exception("check persist byteValueArray allowEmpty error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not be null or empty.");
}
}
}
\ No newline at end of file
package com.x.base.core.container.checker;
import java.lang.reflect.Field;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.container.EntityManagerContainerBasic;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckPersist;
import com.x.base.core.entity.annotation.CheckPersistType;
import com.x.base.core.project.tools.DateTools;
import com.x.base.core.project.tools.ListTools;
public class DateValueListPersistChecker extends AbstractChecker {
public DateValueListPersistChecker(EntityManagerContainerBasic emc) {
super(emc);
}
public void check(Field field, List<Date> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (Objects.equals(checkPersistType, CheckPersistType.all)
|| Objects.equals(checkPersistType, CheckPersistType.baseOnly)) {
this.allowEmpty(field, values, jpa, checkPersist, checkPersistType);
this.allowContainEmpty(field, values, jpa, checkPersist, checkPersistType);
this.max(field, values, jpa, checkPersist, checkPersistType);
this.min(field, values, jpa, checkPersist, checkPersistType);
}
}
private void allowEmpty(Field field, List<Date> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if ((!checkPersist.allowEmpty()) && (ListTools.nullToEmpty(values).isEmpty())) {
throw new Exception("check persist dateValueList allowEmpty error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not be null or empty.");
}
}
private void allowContainEmpty(Field field, List<Date> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (!checkPersist.allowContainEmpty()) {
for (Date o : ListTools.nullToEmpty(values)) {
if (null == o) {
throw new Exception("check persist dateValueList allowContainEmpty error, class:"
+ jpa.getClass().getName() + ", field:" + field.getName() + ", can not contain null.");
}
}
}
}
private void max(Field field, List<Date> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.max())) {
Date date = DateTools.parse(checkPersist.max());
for (Date o : ListTools.nullToEmpty(values)) {
if (null != o && o.after(date)) {
throw new Exception(
"check persist dateValueList max error, class:" + jpa.getClass().getName() + ", field:"
+ field.getName() + ", can not contain value after:" + checkPersist.max() + ".");
}
}
}
}
private void min(Field field, List<Date> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.min())) {
Date date = DateTools.parse(checkPersist.min());
for (Date o : ListTools.nullToEmpty(values)) {
if (null != o && o.before(date)) {
throw new Exception(
"check persist dateValueList min error, class:" + jpa.getClass().getName() + ", field:"
+ field.getName() + ", can not contain value before:" + checkPersist.min() + ".");
}
}
}
}
}
\ No newline at end of file
package com.x.base.core.container.checker;
import java.lang.reflect.Field;
import java.util.Date;
import java.util.Objects;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.container.EntityManagerContainerBasic;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckPersist;
import com.x.base.core.entity.annotation.CheckPersistType;
import com.x.base.core.project.tools.DateTools;
public class DateValuePersistChecker extends AbstractChecker {
public DateValuePersistChecker(EntityManagerContainerBasic emc) {
super(emc);
}
public void check(Field field, Date value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (Objects.equals(checkPersistType, CheckPersistType.all)
|| Objects.equals(checkPersistType, CheckPersistType.baseOnly)) {
this.allowEmpty(field, value, jpa, checkPersist, checkPersistType);
this.max(field, value, jpa, checkPersist, checkPersistType);
this.min(field, value, jpa, checkPersist, checkPersistType);
}
}
private void allowEmpty(Field field, Date value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if ((!checkPersist.allowEmpty()) && (value == null)) {
throw new Exception("check persist dateValue allowEmpty error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not be null.");
}
}
private void max(Field field, Date value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.max()) && (value != null)) {
Date date = DateTools.parse(checkPersist.max());
if (value.after(date)) {
throw new Exception("check persist dateValue max error, class:" + jpa.getClass().getName() + ", field:"
+ field.getName() + ", can not after:" + checkPersist.max() + ".");
}
}
}
private void min(Field field, Date value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.min()) && (value != null)) {
Date date = DateTools.parse(checkPersist.min());
if (value.before(date)) {
throw new Exception("check persist dateValue min error, class:" + jpa.getClass().getName() + ", field:"
+ field.getName() + ", can not before:" + checkPersist.min() + ".");
}
}
}
}
\ No newline at end of file
package com.x.base.core.container.checker;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Objects;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.container.EntityManagerContainerBasic;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckPersist;
import com.x.base.core.entity.annotation.CheckPersistType;
import com.x.base.core.project.tools.ListTools;
public class DoubleValueListPersistChecker extends AbstractChecker {
public DoubleValueListPersistChecker(EntityManagerContainerBasic emc) {
super(emc);
}
public void check(Field field, List<Double> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (Objects.equals(checkPersistType, CheckPersistType.all)
|| Objects.equals(checkPersistType, CheckPersistType.baseOnly)) {
this.allowEmpty(field, values, jpa, checkPersist, checkPersistType);
this.allowContainEmpty(field, values, jpa, checkPersist, checkPersistType);
this.max(field, values, jpa, checkPersist, checkPersistType);
this.min(field, values, jpa, checkPersist, checkPersistType);
}
}
private void allowEmpty(Field field, List<Double> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if ((!checkPersist.allowEmpty()) && (ListTools.nullToEmpty(values).isEmpty())) {
throw new Exception("check persist doubleValueList allowEmpty error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not be null or empty.");
}
}
private void allowContainEmpty(Field field, List<Double> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (!checkPersist.allowContainEmpty()) {
for (Double o : ListTools.nullToEmpty(values)) {
if (null == o) {
throw new Exception("check persist doubleValueList allowContainEmpty error, class:"
+ jpa.getClass().getName() + ", field:" + field.getName() + ", can not contain null.");
}
}
}
}
private void max(Field field, List<Double> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.max())) {
Double max = Double.parseDouble(checkPersist.max());
for (Double o : ListTools.nullToEmpty(values)) {
if (null != o && o > max) {
throw new Exception("check persist doubleValueList max error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not contain value larger than:" + checkPersist.max()
+ ".");
}
}
}
}
private void min(Field field, List<Double> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.min())) {
Double min = Double.parseDouble(checkPersist.min());
for (Double o : ListTools.nullToEmpty(values)) {
if (null != o && o < min) {
throw new Exception("check doubleValueList min error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not contain value lesser than:" + checkPersist.min()
+ ".");
}
}
}
}
}
\ No newline at end of file
package com.x.base.core.container.checker;
import java.lang.reflect.Field;
import java.util.Objects;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.container.EntityManagerContainerBasic;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckPersist;
import com.x.base.core.entity.annotation.CheckPersistType;
public class DoubleValuePersistChecker extends AbstractChecker {
public DoubleValuePersistChecker(EntityManagerContainerBasic emc) {
super(emc);
}
public void check(Field field, Double value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (Objects.equals(checkPersistType, CheckPersistType.all)
|| Objects.equals(checkPersistType, CheckPersistType.baseOnly)) {
this.allowEmpty(field, value, jpa, checkPersist, checkPersistType);
this.max(field, value, jpa, checkPersist, checkPersistType);
this.min(field, value, jpa, checkPersist, checkPersistType);
}
}
private void allowEmpty(Field field, Double value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if ((!checkPersist.allowEmpty()) && (null == value)) {
throw new Exception("check persist doubleValue allowEmpty error, class:" + jpa.getClass().getName() + ", field:"
+ field.getName() + ", can not be null.");
}
}
private void max(Field field, Double value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.max()) && (null != value)) {
Double max = Double.parseDouble(checkPersist.max());
if (max < value) {
throw new Exception("check persist doubleValue max error, class:" + jpa.getClass().getName() + ", field:"
+ field.getName() + ", can not larger then:" + checkPersist.max() + ".");
}
}
}
private void min(Field field, Double value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.min()) && (null != value)) {
Double min = Double.parseDouble(checkPersist.min());
if (min > value) {
throw new Exception("check persist doubleValue min error, class:" + jpa.getClass().getName() + ", field:"
+ field.getName() + ", can not lesser then:" + checkPersist.min() + ".");
}
}
}
}
\ No newline at end of file
package com.x.base.core.container.checker;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Objects;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.container.EntityManagerContainerBasic;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckPersist;
import com.x.base.core.entity.annotation.CheckPersistType;
import com.x.base.core.project.tools.ListTools;
public class FloatValueListPersistChecker extends AbstractChecker {
public FloatValueListPersistChecker(EntityManagerContainerBasic emc) {
super(emc);
}
public void check(Field field, List<Float> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (Objects.equals(checkPersistType, CheckPersistType.all)
|| Objects.equals(checkPersistType, CheckPersistType.baseOnly)) {
this.allowEmpty(field, values, jpa, checkPersist, checkPersistType);
this.allowContainEmpty(field, values, jpa, checkPersist, checkPersistType);
this.max(field, values, jpa, checkPersist, checkPersistType);
this.min(field, values, jpa, checkPersist, checkPersistType);
}
}
private void allowEmpty(Field field, List<Float> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if ((!checkPersist.allowEmpty()) && (ListTools.nullToEmpty(values).isEmpty())) {
throw new Exception("check persist floatValueList allowEmpty error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not be null or empty.");
}
}
private void allowContainEmpty(Field field, List<Float> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (!checkPersist.allowContainEmpty()) {
for (Float o : ListTools.nullToEmpty(values)) {
if (null == o) {
throw new Exception("check persist floatValueList allowContainEmpty error, class:"
+ jpa.getClass().getName() + ", field:" + field.getName() + ", can not contain null.");
}
}
}
}
private void max(Field field, List<Float> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.max())) {
Float max = Float.parseFloat(checkPersist.max());
for (Float o : ListTools.nullToEmpty(values)) {
if (null != o && o > max) {
throw new Exception("check persist floatValueList max error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not contain value larger than:" + checkPersist.max()
+ ".");
}
}
}
}
private void min(Field field, List<Float> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.min())) {
Float min = Float.parseFloat(checkPersist.min());
for (Float o : ListTools.nullToEmpty(values)) {
if (null != o && o < min) {
throw new Exception("check floatValueList min error, class:" + jpa.getClass().getName() + ", field:"
+ field.getName() + ", can not contain value lesser than:" + checkPersist.min() + ".");
}
}
}
}
}
\ No newline at end of file
package com.x.base.core.container.checker;
import java.lang.reflect.Field;
import java.util.Objects;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.container.EntityManagerContainerBasic;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckPersist;
import com.x.base.core.entity.annotation.CheckPersistType;
public class FloatValuePersistChecker extends AbstractChecker {
public FloatValuePersistChecker(EntityManagerContainerBasic emc) {
super(emc);
}
public void check(Field field, Float value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (Objects.equals(checkPersistType, CheckPersistType.all)
|| Objects.equals(checkPersistType, CheckPersistType.baseOnly)) {
this.allowEmpty(field, value, jpa, checkPersist, checkPersistType);
this.max(field, value, jpa, checkPersist, checkPersistType);
this.min(field, value, jpa, checkPersist, checkPersistType);
}
}
private void allowEmpty(Field field, Float value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if ((!checkPersist.allowEmpty()) && (null == value)) {
throw new Exception("check persist floatValue allowEmpty error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not be null.");
}
}
private void max(Field field, Float value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.max()) && (null != value)) {
Float max = Float.parseFloat(checkPersist.max());
if (max < value) {
throw new Exception("check persist floatValue max error, class:" + jpa.getClass().getName() + ", field:"
+ field.getName() + ", can not larger then:" + checkPersist.max() + ".");
}
}
}
private void min(Field field, Float value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.min()) && (null != value)) {
Float min = Float.parseFloat(checkPersist.min());
if (min > value) {
throw new Exception("check persist floatValue min error, class:" + jpa.getClass().getName() + ", field:"
+ field.getName() + ", can not lesser then:" + checkPersist.min() + ".");
}
}
}
}
\ No newline at end of file
package com.x.base.core.container.checker;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Objects;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.container.EntityManagerContainerBasic;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckPersist;
import com.x.base.core.entity.annotation.CheckPersistType;
import com.x.base.core.project.tools.ListTools;
public class IntegerValueListPersistChecker extends AbstractChecker {
public IntegerValueListPersistChecker(EntityManagerContainerBasic emc) {
super(emc);
}
public void check(Field field, List<Integer> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (Objects.equals(checkPersistType, CheckPersistType.all)
|| Objects.equals(checkPersistType, CheckPersistType.baseOnly)) {
this.allowEmpty(field, values, jpa, checkPersist, checkPersistType);
this.allowContainEmpty(field, values, jpa, checkPersist, checkPersistType);
this.max(field, values, jpa, checkPersist, checkPersistType);
this.min(field, values, jpa, checkPersist, checkPersistType);
}
}
private void allowEmpty(Field field, List<Integer> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if ((!checkPersist.allowEmpty()) && (ListTools.nullToEmpty(values).isEmpty())) {
throw new Exception("check persist integerValueList allowEmpty error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not be null or emtpy.");
}
}
private void allowContainEmpty(Field field, List<Integer> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (!checkPersist.allowContainEmpty()) {
for (Integer o : ListTools.nullToEmpty(values)) {
if (null == o) {
throw new Exception("check persist integerValueList allowContainEmpty error, class:"
+ jpa.getClass().getName() + ", field:" + field.getName() + ", can not contain null.");
}
}
}
}
private void max(Field field, List<Integer> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.max())) {
Integer max = Integer.parseInt(checkPersist.max());
for (Integer o : ListTools.nullToEmpty(values)) {
if (null != o && o > max) {
throw new Exception("check persist integerValueList max error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not contain value larger than:" + checkPersist.max()
+ ".");
}
}
}
}
private void min(Field field, List<Integer> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.min())) {
Integer min = Integer.parseInt(checkPersist.min());
for (Integer o : ListTools.nullToEmpty(values)) {
if (null != o && o < min) {
throw new Exception("check persist integerValueList min error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not contain value lesser than:" + checkPersist.min()
+ ".");
}
}
}
}
}
\ No newline at end of file
package com.x.base.core.container.checker;
import java.lang.reflect.Field;
import java.util.Objects;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.container.EntityManagerContainerBasic;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckPersist;
import com.x.base.core.entity.annotation.CheckPersistType;
public class IntegerValuePersistChecker extends AbstractChecker {
public IntegerValuePersistChecker(EntityManagerContainerBasic emc) {
super(emc);
}
public void check(Field field, Integer value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (Objects.equals(checkPersistType, CheckPersistType.all)
|| Objects.equals(checkPersistType, CheckPersistType.baseOnly)) {
this.allowEmpty(field, value, jpa, checkPersist, checkPersistType);
this.max(field, value, jpa, checkPersist, checkPersistType);
this.min(field, value, jpa, checkPersist, checkPersistType);
}
}
private void allowEmpty(Field field, Integer value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if ((!checkPersist.allowEmpty()) && (null == value)) {
throw new Exception("check persist integerValue allowEmpty error, class:" + jpa.getClass().getName() + ", field:"
+ field.getName() + ", can not be null.");
}
}
private void max(Field field, Integer value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.max()) && (null != value)) {
Integer max = Integer.parseInt(checkPersist.max());
if (max < value) {
throw new Exception("check persist integerValue max error, class:" + jpa.getClass().getName() + ", field:"
+ field.getName() + ", can not larger then:" + checkPersist.max() + ".");
}
}
}
private void min(Field field, Integer value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.min()) && (null != value)) {
Integer min = Integer.parseInt(checkPersist.min());
if (min > value) {
throw new Exception("check persist integerValue min error, class:" + jpa.getClass().getName() + ", field:"
+ field.getName() + ", can not lesser then:" + checkPersist.min() + ".");
}
}
}
}
\ No newline at end of file
package com.x.base.core.container.checker;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Objects;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.container.EntityManagerContainerBasic;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckPersist;
import com.x.base.core.entity.annotation.CheckPersistType;
import com.x.base.core.project.tools.ListTools;
public class LongValueListPersistChecker extends AbstractChecker {
public LongValueListPersistChecker(EntityManagerContainerBasic emc) {
super(emc);
}
public void check(Field field, List<Long> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (Objects.equals(checkPersistType, CheckPersistType.all)
|| Objects.equals(checkPersistType, CheckPersistType.baseOnly)) {
this.allowEmpty(field, values, jpa, checkPersist, checkPersistType);
this.allowContainEmpty(field, values, jpa, checkPersist, checkPersistType);
this.max(field, values, jpa, checkPersist, checkPersistType);
this.min(field, values, jpa, checkPersist, checkPersistType);
}
}
private void allowEmpty(Field field, List<Long> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if ((!checkPersist.allowEmpty()) && (ListTools.nullToEmpty(values).isEmpty())) {
throw new Exception("check persist longValueList allowEmpty error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not be null or emtpy.");
}
}
private void allowContainEmpty(Field field, List<Long> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (!checkPersist.allowContainEmpty()) {
for (Long o : ListTools.nullToEmpty(values)) {
if (null == o) {
throw new Exception("check persist longValueList allowContainEmpty error, class:"
+ jpa.getClass().getName() + ", field:" + field.getName() + ", can not contain null.");
}
}
}
}
private void max(Field field, List<Long> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.max())) {
Long max = Long.parseLong(checkPersist.max());
for (Long o : ListTools.nullToEmpty(values)) {
if (null != o && o > max) {
throw new Exception("check persist longValueList max error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not contain value larger than:" + checkPersist.max()
+ ".");
}
}
}
}
private void min(Field field, List<Long> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.min())) {
Long min = Long.parseLong(checkPersist.min());
for (Long o : ListTools.nullToEmpty(values)) {
if (null != o && o < min) {
throw new Exception("check persist longValueList min error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not contain value lesser than:" + checkPersist.min()
+ ".");
}
}
}
}
}
\ No newline at end of file
package com.x.base.core.container.checker;
import java.lang.reflect.Field;
import java.util.Objects;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.container.EntityManagerContainerBasic;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckPersist;
import com.x.base.core.entity.annotation.CheckPersistType;
public class LongValuePersistChecker extends AbstractChecker {
public LongValuePersistChecker(EntityManagerContainerBasic emc) {
super(emc);
}
public void check(Field field, Long value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (Objects.equals(checkPersistType, CheckPersistType.all)
|| Objects.equals(checkPersistType, CheckPersistType.baseOnly)) {
this.allowEmpty(field, value, jpa, checkPersist, checkPersistType);
this.max(field, value, jpa, checkPersist, checkPersistType);
this.min(field, value, jpa, checkPersist, checkPersistType);
}
}
private void allowEmpty(Field field, Long value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if ((!checkPersist.allowEmpty()) && (null == value)) {
throw new Exception("check persist longValue allowEmpty error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not be null.");
}
}
private void max(Field field, Long value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.max()) && (null != value)) {
Long max = Long.parseLong(checkPersist.max());
if (max < value) {
throw new Exception("check persist longValue max error, class:" + jpa.getClass().getName() + ", field:"
+ field.getName() + ", can not larger then:" + checkPersist.max() + ".");
}
}
}
private void min(Field field, Long value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.min()) && (null != value)) {
Long min = Long.parseLong(checkPersist.min());
if (min > value) {
throw new Exception("check persist longValue min error, class:" + jpa.getClass().getName() + ", field:"
+ field.getName() + ", can not lesser then:" + checkPersist.min() + ".");
}
}
}
}
\ No newline at end of file
package com.x.base.core.container.checker;
import java.lang.reflect.Field;
import java.nio.charset.Charset;
import java.util.List;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.openjpa.persistence.jdbc.ElementColumn;
import com.x.base.core.container.EntityManagerContainerBasic;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckPersist;
import com.x.base.core.entity.annotation.CheckPersistType;
import com.x.base.core.entity.annotation.CitationExist;
import com.x.base.core.entity.annotation.CitationNotExist;
import com.x.base.core.entity.annotation.Equal;
import com.x.base.core.entity.annotation.NotEqual;
import com.x.base.core.entity.tools.JpaObjectTools;
import com.x.base.core.project.tools.ListTools;
import com.x.base.core.project.tools.StringTools;
public class StringValueListPersistChecker extends AbstractChecker {
public StringValueListPersistChecker(EntityManagerContainerBasic emc) {
super(emc);
}
public void check(Field field, List<String> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (Objects.equals(checkPersistType, CheckPersistType.all)
|| Objects.equals(checkPersistType, CheckPersistType.baseOnly)) {
this.allowEmpty(field, values, jpa, checkPersist, checkPersistType);
this.allowContainEmpty(field, values, jpa, checkPersist, checkPersistType);
this.length(field, values, jpa, checkPersist, checkPersistType);
this.simply(field, values, jpa, checkPersist, checkPersistType);
this.fileName(field, values, jpa, checkPersist, checkPersistType);
this.mail(field, values, jpa, checkPersist, checkPersistType);
this.moible(field, values, jpa, checkPersist, checkPersistType);
this.pattern(field, values, jpa, checkPersist, checkPersistType);
}
if (Objects.equals(checkPersistType, CheckPersistType.all)
|| Objects.equals(checkPersistType, CheckPersistType.citationOnly)) {
this.citationExists(this.emc, field, values, jpa, checkPersist, checkPersistType);
this.citationNotExists(this.emc, field, values, jpa, checkPersist, checkPersistType);
}
}
private void allowEmpty(Field field, List<String> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if ((!checkPersist.allowEmpty()) && (ListTools.nullToEmpty(values).isEmpty())) {
throw new Exception("check persist stirngValueList allowEmpty error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not be null or empty.");
}
}
private void allowContainEmpty(Field field, List<String> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (!checkPersist.allowContainEmpty()) {
for (String str : ListTools.nullToEmpty(values)) {
if (StringUtils.isEmpty(str)) {
throw new Exception("check persist stirngValueList allowContainEmpty error, class:"
+ jpa.getClass().getName() + ", field:" + field.getName() + ",values:"
+ StringUtils.join(values, ",") + " can not contain null or empty value.");
}
}
}
}
private void length(Field field, List<String> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
ElementColumn elementColumn = field.getAnnotation(ElementColumn.class);
for (String str : ListTools.nullToEmpty(values)) {
if (StringUtils.isNotEmpty(str)) {
int len = Objects.toString(str).getBytes(Charset.forName("UTF-8")).length;
if (len > elementColumn.length()) {
throw new Exception("check persist stirngValueList length error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", values:" + StringUtils.join(values, ",") + ",value:"
+ str + ", length:" + len + ", max:" + elementColumn.length() + ".");
}
}
}
}
private void simply(Field field, List<String> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (checkPersist.simplyString()) {
for (String str : ListTools.nullToEmpty(values)) {
if (StringUtils.isNotEmpty(str)) {
if (!StringTools.isSimply(str)) {
throw new Exception("check persist stringValueList simply error, class:"
+ jpa.getClass().getName() + ", field:" + field.getName() + ", values:"
+ StringUtils.join(values, ",") + "value:" + str + ".");
}
}
}
}
}
private void fileName(Field field, List<String> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (checkPersist.fileNameString()) {
for (String str : ListTools.nullToEmpty(values)) {
if (StringUtils.isNotEmpty(str)) {
if (!StringTools.isFileName(str)) {
throw new Exception("check persist stringValueList fileName error, class:"
+ jpa.getClass().getName() + ", field:" + field.getName() + ", values:"
+ StringUtils.join(values, ",") + "value:" + str + ".");
}
}
}
}
}
private void mail(Field field, List<String> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (checkPersist.mailString()) {
for (String str : ListTools.nullToEmpty(values)) {
if (StringUtils.isNotEmpty(str)) {
if (!StringTools.isMail(str)) {
throw new Exception("check persist stringValueList mail error, class:"
+ jpa.getClass().getName() + ", field:" + field.getName() + ", values:"
+ StringUtils.join(values, ",") + ", value:" + str + ".");
}
}
}
}
}
private void pattern(Field field, List<String> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.pattern())) {
Pattern pattern = Pattern.compile(checkPersist.pattern());
for (String str : ListTools.nullToEmpty(values)) {
Matcher matcher = pattern.matcher(str);
if (!matcher.find()) {
throw new Exception(
"check persist stirngValue pattern error, class:" + jpa.getClass().getName() + ", field:"
+ field.getName() + ", value:" + str + ", pattern:" + checkPersist.pattern() + ".");
}
}
}
}
private void moible(Field field, List<String> values, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (checkPersist.mobileString()) {
for (String str : ListTools.nullToEmpty(values)) {
if (StringUtils.isNotEmpty(str)) {
if (!StringTools.isMobile(str)) {
throw new Exception("check persist stringValueList mobile error, class:"
+ jpa.getClass().getName() + ", field:" + field.getName() + ", values:"
+ StringUtils.join(values, ",") + "value:" + str + ".");
}
}
}
}
}
@SuppressWarnings("unchecked")
private void citationExists(EntityManagerContainerBasic emc, Field field, List<String> values, JpaObject jpa,
CheckPersist checkPersist, CheckPersistType checkPersistType) throws Exception {
next: for (String value : ListTools.nullToEmpty(values)) {
if (ArrayUtils.contains(checkPersist.excludes(), value)) {
continue next;
}
for (CitationExist citationExist : checkPersist.citationExists()) {
EntityManager em = emc.get(citationExist.type());
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<? extends JpaObject> root = cq.from(citationExist.type());
Predicate p = cb.disjunction();
for (String str : citationExist.fields()) {
/* 如果值过长db2会报错 302 22001 */
if (JpaObjectTools.withinDefinedLength(value, citationExist.type(), str)) {
Path<?> path = root.get(str);
if (JpaObjectTools.isList(path)) {
p = cb.or(p, cb.isMember(value, (Path<List<String>>) path));
} else {
p = cb.or(p, cb.equal(path, value));
}
}
}
p = cb.and(p, cb.notEqual(root.get("id"), jpa.getId()));
for (Equal o : citationExist.equals()) {
p = cb.and(p, cb.equal(root.get(o.field()), jpa.get(o.property())));
}
for (NotEqual o : citationExist.notEquals()) {
p = cb.and(p, cb.notEqual(root.get(o.field()), jpa.get(o.property())));
}
cq.select(cb.count(root)).where(p);
Long count = em.createQuery(cq).getSingleResult();
if (count == 0) {
throw new Exception("check persist stringValueList citationExists error, class:"
+ jpa.getClass().getName() + ", field:" + field.getName() + ", values: "
+ StringUtils.join(values, ",") + ", value:" + value + ", must be a existed in class:"
+ citationExist.type() + ", fields:" + StringUtils.join(citationExist.fields(), ",") + ".");
}
}
}
}
@SuppressWarnings("unchecked")
private void citationNotExists(EntityManagerContainerBasic emc, Field field, List<String> values, JpaObject jpa,
CheckPersist checkPersist, CheckPersistType checkPersistType) throws Exception {
next: for (String value : ListTools.nullToEmpty(values)) {
if (ArrayUtils.contains(checkPersist.excludes(), value)) {
continue next;
}
for (CitationNotExist citationNotExist : checkPersist.citationNotExists()) {
EntityManager em = emc.get(citationNotExist.type());
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<? extends JpaObject> root = cq.from(citationNotExist.type());
Predicate p = cb.disjunction();
for (String str : citationNotExist.fields()) {
/* 如果值过长db2会报错 302 22001 */
if (JpaObjectTools.withinDefinedLength(value, citationNotExist.type(), str)) {
Path<?> path = root.get(str);
if (JpaObjectTools.isList(path)) {
p = cb.or(p, cb.isMember(value, (Path<List<String>>) path));
} else {
p = cb.or(p, cb.equal(path, value));
}
}
}
p = cb.and(p, cb.notEqual(root.get("id"), jpa.getId()));
for (Equal o : citationNotExist.equals()) {
p = cb.and(p, cb.equal(root.get(o.field()), jpa.get(o.property())));
}
for (NotEqual o : citationNotExist.notEquals()) {
p = cb.and(p, cb.notEqual(root.get(o.field()), jpa.get(o.property())));
}
cq.select(cb.count(root)).where(p);
Long count = em.createQuery(cq).getSingleResult();
if (count != 0) {
throw new Exception(
"check persist stringValueList citationNotExists error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", values: " + StringUtils.join(values, ",")
+ ", value:" + value + ", already existed in class:" + citationNotExist.type()
+ ", fields:" + StringUtils.join(citationNotExist.fields(), ",") + ".");
}
}
}
}
}
\ No newline at end of file
package com.x.base.core.container.checker;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Objects;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.container.EntityManagerContainerBasic;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckRemove;
import com.x.base.core.entity.annotation.CheckRemoveType;
import com.x.base.core.entity.annotation.CitationExist;
import com.x.base.core.entity.annotation.CitationNotExist;
import com.x.base.core.entity.annotation.Equal;
import com.x.base.core.entity.annotation.NotEqual;
import com.x.base.core.entity.tools.JpaObjectTools;
import com.x.base.core.project.tools.ListTools;
public class StringValueListRemoveChecker extends AbstractChecker {
public StringValueListRemoveChecker(EntityManagerContainerBasic emc) {
super(emc);
}
public void check(Field field, List<String> values, JpaObject jpa, CheckRemove checkRemove,
CheckRemoveType checkRemoveType) throws Exception {
if (Objects.equals(checkRemoveType, CheckRemoveType.all)) {
this.citationExists(this.emc, field, values, jpa, checkRemove, checkRemoveType);
this.citationNotExists(this.emc, field, values, jpa, checkRemove, checkRemoveType);
}
}
@SuppressWarnings("unchecked")
private void citationExists(EntityManagerContainerBasic emc, Field field, List<String> values, JpaObject jpa,
CheckRemove checkRemove, CheckRemoveType checkRemoveType) throws Exception {
next: for (String value : ListTools.nullToEmpty(values)) {
if (ArrayUtils.contains(checkRemove.excludes(), value)) {
continue next;
}
for (CitationExist citationExist : checkRemove.citationExists()) {
EntityManager em = emc.get(citationExist.type());
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<? extends JpaObject> root = cq.from(citationExist.type());
Predicate p = cb.disjunction();
for (String str : citationExist.fields()) {
Path<?> path = root.get(str);
if (JpaObjectTools.isList(path)) {
p = cb.or(p, cb.isMember(value, (Path<List<String>>) path));
} else {
p = cb.or(p, cb.equal(path, value));
}
}
p = cb.and(p, cb.notEqual(root.get("id"), jpa.getId()));
for (Equal o : citationExist.equals()) {
p = cb.and(p, cb.equal(root.get(o.field()), jpa.get(o.property())));
}
for (NotEqual o : citationExist.notEquals()) {
p = cb.and(p, cb.notEqual(root.get(o.field()), jpa.get(o.property())));
}
cq.select(cb.count(root)).where(p);
Long count = em.createQuery(cq).getSingleResult();
if (count == 0) {
throw new Exception("check remove stringValueList citationExists error, class:"
+ jpa.getClass().getName() + ", field:" + field.getName() + ", values: "
+ StringUtils.join(values, ",") + ", value:" + value + ", must be a existed in class:"
+ citationExist.type() + ", fields:" + StringUtils.join(citationExist.fields(), ",") + ".");
}
}
}
}
@SuppressWarnings("unchecked")
private void citationNotExists(EntityManagerContainerBasic emc, Field field, List<String> values, JpaObject jpa,
CheckRemove checkRemove, CheckRemoveType checkRemoveType) throws Exception {
next: for (String value : ListTools.nullToEmpty(values)) {
if (ArrayUtils.contains(checkRemove.excludes(), value)) {
continue next;
}
for (CitationNotExist citationNotExist : checkRemove.citationNotExists()) {
EntityManager em = emc.get(citationNotExist.type());
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<? extends JpaObject> root = cq.from(citationNotExist.type());
Predicate p = cb.disjunction();
for (String str : citationNotExist.fields()) {
Path<?> path = root.get(str);
if (JpaObjectTools.isList(path)) {
p = cb.or(p, cb.isMember(value, (Path<List<String>>) path));
} else {
p = cb.or(p, cb.equal(path, value));
}
}
p = cb.and(p, cb.notEqual(root.get("id"), jpa.getId()));
for (Equal o : citationNotExist.equals()) {
p = cb.and(p, cb.equal(root.get(o.field()), jpa.get(o.property())));
}
for (NotEqual o : citationNotExist.notEquals()) {
p = cb.and(p, cb.notEqual(root.get(o.field()), jpa.get(o.property())));
}
cq.select(cb.count(root)).where(p);
Long count = em.createQuery(cq).getSingleResult();
if (count != 0) {
throw new Exception(
"check remove stringValueList citationNotExists error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", values: " + StringUtils.join(values, ",")
+ ", value:" + value + ", already existed in class:" + citationNotExist.type()
+ ", fields:" + StringUtils.join(citationNotExist.fields(), ",") + ".");
}
}
}
}
}
\ No newline at end of file
package com.x.base.core.container.checker;
import java.lang.reflect.Field;
import java.nio.charset.Charset;
import java.util.List;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.persistence.Column;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.container.EntityManagerContainerBasic;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckPersist;
import com.x.base.core.entity.annotation.CheckPersistType;
import com.x.base.core.entity.annotation.CitationExist;
import com.x.base.core.entity.annotation.CitationNotExist;
import com.x.base.core.entity.annotation.Equal;
import com.x.base.core.entity.annotation.NotEqual;
import com.x.base.core.entity.tools.JpaObjectTools;
import com.x.base.core.project.tools.StringTools;
public class StringValuePersistChecker extends AbstractChecker {
public StringValuePersistChecker(EntityManagerContainerBasic emc) {
super(emc);
}
public void check(Field field, String value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (Objects.equals(checkPersistType, CheckPersistType.all)
|| Objects.equals(checkPersistType, CheckPersistType.baseOnly)) {
this.allowEmpty(field, value, jpa, checkPersist, checkPersistType);
this.length(field, value, jpa, checkPersist, checkPersistType);
this.simply(field, value, jpa, checkPersist, checkPersistType);
this.fileName(field, value, jpa, checkPersist, checkPersistType);
this.mail(field, value, jpa, checkPersist, checkPersistType);
this.mobile(field, value, jpa, checkPersist, checkPersistType);
this.pattern(field, value, jpa, checkPersist, checkPersistType);
}
if (Objects.equals(checkPersistType, CheckPersistType.all)
|| Objects.equals(checkPersistType, CheckPersistType.citationOnly)) {
this.citationExists(this.emc, field, value, jpa, checkPersist, checkPersistType);
this.citationNotExists(this.emc, field, value, jpa, checkPersist, checkPersistType);
}
}
private void allowEmpty(Field field, String value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if ((!checkPersist.allowEmpty()) && (value == null || value.toString().length() < 1)) {
throw new Exception("check persist stirngValue allowEmpty error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", can not be null or empty.");
}
}
private void length(Field field, String value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
Column column = field.getAnnotation(Column.class);
int len = Objects.toString(value).getBytes(Charset.forName("UTF-8")).length;
if (len > column.length()) {
throw new Exception("check persist stirngValue length error, class:" + jpa.getClass().getName() + ", field:"
+ field.getName() + ", value:" + value + ", length:" + len + ", max:" + column.length() + ".");
}
}
private void simply(Field field, String value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (checkPersist.simplyString() && StringUtils.isNotEmpty(value)) {
if (!StringTools.isSimply(value)) {
throw new Exception("check persist stirngValue simply error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", value:" + value + ".");
}
}
}
private void fileName(Field field, String value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (checkPersist.fileNameString() && StringUtils.isNotEmpty(value)) {
if (!StringTools.isFileName(value)) {
throw new Exception("check persist stirngValue fileName error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", value:" + value + ".");
}
}
}
private void mail(Field field, String value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (checkPersist.mailString() && StringUtils.isNotEmpty(value)) {
if (!StringTools.isMail(value)) {
throw new Exception("check persist stirngValue mail error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", value:" + value + ".");
}
}
}
private void mobile(Field field, String value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (checkPersist.mobileString() && StringUtils.isNotEmpty(value)) {
if (!StringTools.isMobile(value)) {
throw new Exception("check persist stirngValue mobile error, class:" + jpa.getClass().getName()
+ ", field:" + field.getName() + ", value:" + value + ".");
}
}
}
private void pattern(Field field, String value, JpaObject jpa, CheckPersist checkPersist,
CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(checkPersist.pattern()) && StringUtils.isNotEmpty(value)) {
Pattern pattern = Pattern.compile(checkPersist.pattern());
Matcher matcher = pattern.matcher(value);
if (!matcher.find()) {
throw new Exception(
"check persist stirngValue pattern error, class:" + jpa.getClass().getName() + ", field:"
+ field.getName() + ", value:" + value + ", pattern:" + checkPersist.pattern() + ".");
}
}
}
@SuppressWarnings("unchecked")
private void citationExists(EntityManagerContainerBasic emc, Field field, String value, JpaObject jpa,
CheckPersist checkPersist, CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(value) && (!ArrayUtils.contains(checkPersist.excludes(), value))) {
for (CitationExist citationExist : checkPersist.citationExists()) {
EntityManager em = emc.get(citationExist.type());
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<? extends JpaObject> root = cq.from(citationExist.type());
Predicate p = cb.disjunction();
for (String str : citationExist.fields()) {
Path<?> path = root.get(str);
if (JpaObjectTools.isList(path)) {
p = cb.or(p, cb.isMember(value, (Path<List<String>>) path));
} else {
p = cb.or(p, cb.equal(path, value));
}
}
p = cb.and(p, cb.notEqual(root.get("id"), jpa.getId()));
for (Equal o : citationExist.equals()) {
p = cb.and(p, cb.equal(root.get(o.field()), jpa.get(o.property())));
}
for (NotEqual o : citationExist.notEquals()) {
p = cb.and(p, cb.notEqual(root.get(o.field()), jpa.get(o.property())));
}
cq.select(cb.count(root)).where(p);
Long count = em.createQuery(cq).getSingleResult();
if (count == 0) {
throw new Exception("check persist stirngValue citationExists error, class:"
+ jpa.getClass().getName() + ", field:" + field.getName() + ", value: " + value
+ " must be a existed in class:" + citationExist.type() + ", fields:"
+ StringUtils.join(citationExist.fields(), ",") + ".");
}
}
}
}
@SuppressWarnings("unchecked")
private void citationNotExists(EntityManagerContainerBasic emc, Field field, String value, JpaObject jpa,
CheckPersist checkPersist, CheckPersistType checkPersistType) throws Exception {
if (StringUtils.isNotEmpty(value) && (!ArrayUtils.contains(checkPersist.excludes(), value))) {
for (CitationNotExist citationNotExist : checkPersist.citationNotExists()) {
EntityManager em = emc.get(citationNotExist.type());
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<? extends JpaObject> root = cq.from(citationNotExist.type());
Predicate p = cb.disjunction();
for (String str : citationNotExist.fields()) {
Path<?> path = root.get(str);
if (JpaObjectTools.isList(path)) {
p = cb.or(p, cb.isMember(value, (Path<List<String>>) path));
} else {
p = cb.or(p, cb.equal(path, value));
}
}
p = cb.and(p, cb.notEqual(root.get("id"), jpa.getId()));
for (Equal o : citationNotExist.equals()) {
p = cb.and(p, cb.equal(root.get(o.field()), jpa.get(o.property())));
}
for (NotEqual o : citationNotExist.notEquals()) {
p = cb.and(p, cb.notEqual(root.get(o.field()), jpa.get(o.property())));
}
cq.select(cb.count(root)).where(p);
Long count = em.createQuery(cq).getSingleResult();
if (count != 0) {
throw new Exception("check persist stirngValue citationNotExists error, class:"
+ jpa.getClass().getName() + ", field:" + field.getName() + ", value: " + value
+ " must be a not existed in class:" + citationNotExist.type() + ", fields:"
+ StringUtils.join(citationNotExist.fields(), ",") + ".");
}
}
}
}
}
\ No newline at end of file
package com.x.base.core.container.checker;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Objects;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.container.EntityManagerContainerBasic;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckRemove;
import com.x.base.core.entity.annotation.CheckRemoveType;
import com.x.base.core.entity.annotation.CitationExist;
import com.x.base.core.entity.annotation.CitationNotExist;
import com.x.base.core.entity.annotation.Equal;
import com.x.base.core.entity.annotation.NotEqual;
import com.x.base.core.entity.tools.JpaObjectTools;
public class StringValueRemoveChecker extends AbstractChecker {
public StringValueRemoveChecker(EntityManagerContainerBasic emc) {
super(emc);
}
public void check(Field field, String value, JpaObject jpa, CheckRemove checkRemove,
CheckRemoveType checkRemoveType) throws Exception {
if (Objects.equals(checkRemoveType, CheckRemoveType.all)) {
this.citationExists(this.emc, field, value, jpa, checkRemove, checkRemoveType);
this.citationNotExists(this.emc, field, value, jpa, checkRemove, checkRemoveType);
}
}
@SuppressWarnings("unchecked")
private void citationExists(EntityManagerContainerBasic emc, Field field, String value, JpaObject jpa,
CheckRemove checkRemove, CheckRemoveType checkRemoveType) throws Exception {
if (StringUtils.isNotEmpty(value) && (!ArrayUtils.contains(checkRemove.excludes(), value))) {
for (CitationExist citationExist : checkRemove.citationExists()) {
EntityManager em = emc.get(citationExist.type());
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<? extends JpaObject> root = cq.from(citationExist.type());
Predicate p = cb.disjunction();
for (String str : citationExist.fields()) {
Path<?> path = root.get(str);
if (JpaObjectTools.isList(path)) {
p = cb.or(p, cb.isMember(value, (Path<List<String>>) path));
} else {
p = cb.or(p, cb.equal(path, value));
}
}
p = cb.and(p, cb.notEqual(root.get("id"), jpa.getId()));
for (Equal o : citationExist.equals()) {
p = cb.and(p, cb.equal(root.get(o.field()), jpa.get(o.property())));
}
for (NotEqual o : citationExist.notEquals()) {
p = cb.and(p, cb.notEqual(root.get(o.field()), jpa.get(o.property())));
}
cq.select(cb.count(root)).where(p);
Long count = em.createQuery(cq).getSingleResult();
if (count == 0) {
throw new Exception("check remove stirngValue citationExists error, class:"
+ jpa.getClass().getName() + ", field:" + field.getName() + ", value: " + value
+ " must be a existed in class:" + citationExist.type() + ", fields:"
+ StringUtils.join(citationExist.fields(), ",") + ".");
}
}
}
}
@SuppressWarnings("unchecked")
private void citationNotExists(EntityManagerContainerBasic emc, Field field, String value, JpaObject jpa,
CheckRemove checkRemove, CheckRemoveType checkRemoveType) throws Exception {
if (StringUtils.isNotEmpty(value) && (!ArrayUtils.contains(checkRemove.excludes(), value))) {
for (CitationNotExist citationNotExist : checkRemove.citationNotExists()) {
EntityManager em = emc.get(citationNotExist.type());
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<? extends JpaObject> root = cq.from(citationNotExist.type());
Predicate p = cb.disjunction();
for (String str : citationNotExist.fields()) {
Path<?> path = root.get(str);
if (JpaObjectTools.isList(path)) {
p = cb.or(p, cb.isMember(value, (Path<List<String>>) path));
} else {
p = cb.or(p, cb.equal(path, value));
}
}
p = cb.and(p, cb.notEqual(root.get("id"), jpa.getId()));
for (Equal o : citationNotExist.equals()) {
p = cb.and(p, cb.equal(root.get(o.field()), jpa.get(o.property())));
}
for (NotEqual o : citationNotExist.notEquals()) {
p = cb.and(p, cb.notEqual(root.get(o.field()), jpa.get(o.property())));
}
cq.select(cb.count(root)).where(p);
Long count = em.createQuery(cq).getSingleResult();
if (count != 0) {
throw new Exception("check remove stirngValue citationNotExists error, class:"
+ jpa.getClass().getName() + ", field:" + field.getName() + ", value: " + value
+ " must be a not existed in class:" + citationNotExist.type() + ", fields:"
+ StringUtils.join(citationNotExist.fields(), ",") + ".");
}
}
}
}
}
\ No newline at end of file
package com.x.base.core.container.factory;
import java.lang.reflect.Field;
import java.sql.Driver;
import java.sql.DriverManager;
import java.util.Enumeration;
import java.util.List;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckPersist;
import com.x.base.core.entity.annotation.CheckRemove;
import com.x.base.core.project.config.DataMappings;
public class EntityManagerContainerFactory extends SliceEntityManagerContainerFactory {
private volatile static EntityManagerContainerFactory instance;
public static void init(String webApplicationDirectory, DataMappings dataMappings) throws Exception {
synchronized (EntityManagerContainerFactory.class) {
if (instance != null) {
EntityManagerContainerFactory.close();
}
instance = new EntityManagerContainerFactory(webApplicationDirectory, dataMappings);
}
}
public static void init(String source) throws Exception {
synchronized (EntityManagerContainerFactory.class) {
if (instance != null) {
EntityManagerContainerFactory.close();
}
instance = new EntityManagerContainerFactory(source);
}
}
public static void init() throws Exception {
synchronized (EntityManagerContainerFactory.class) {
if (instance != null) {
EntityManagerContainerFactory.close();
}
instance = new EntityManagerContainerFactory("");
}
}
public static EntityManagerContainerFactory instance() throws Exception {
if (instance == null) {
throw new Exception("get EntityManagerContainerFactory instance error, not initial.");
}
return instance;
}
private EntityManagerContainerFactory(String webApplicationDirectory, DataMappings dataMappings) throws Exception {
super(webApplicationDirectory, dataMappings);
}
private EntityManagerContainerFactory(String source) throws Exception {
super(source);
}
public static void close() throws Exception {
try {
if (instance != null) {
for (EntityManagerFactory emf : instance.entityManagerFactoryMap.values()) {
if (emf.isOpen()) {
emf.close();
}
}
instance.entityManagerFactoryMap.clear();
instance.checkPersistFieldMap.clear();
instance.checkRemoveFieldMap.clear();
}
/* 注销驱动程序 */
// Set<Driver> drivers = new HashSet<>();
// for (String url : instance.jdbcUrls) {
// drivers.add(DriverManager.getDriver(url));
// }
Enumeration<Driver> drivers = DriverManager.getDrivers();
while (drivers.hasMoreElements()) {
Driver driver = drivers.nextElement();
// System.out.println("deregisterDriver:" + driver);
DriverManager.deregisterDriver(driver);
}
/* 由于可能重新载入 */
instance = null;
} catch (Exception e) {
throw new Exception("close error.", e);
}
}
public EntityManagerContainer create() {
EntityManagerContainer container = new EntityManagerContainer(this);
return container;
}
public <T extends JpaObject> EntityManager createEntityManager(Class<T> cls) throws Exception {
try {
for (Class<?> clazz : entityManagerFactoryMap.keySet()) {
if (clazz.isAssignableFrom(cls)) {
return entityManagerFactoryMap.get(clazz).createEntityManager();
}
}
throw new Exception("can not createEntityManager for class " + cls.getName()
+ ", not registed in EntityManagerContainerFactory.");
} catch (Exception e) {
throw new Exception("get entityManager for " + cls + " error.", e);
}
}
public Map<Field, CheckPersist> getCheckPersistFields(Class<?> clazz) throws Exception {
return checkPersistFieldMap.get(assignableFrom(clazz));
}
public Map<Field, CheckRemove> getCheckRemoveFields(Class<?> clazz) throws Exception {
return checkRemoveFieldMap.get(assignableFrom(clazz));
}
public List<Field> getFlagFields(Class<?> clazz) throws Exception {
return flagMap.get(assignableFrom(clazz));
}
public List<Field> getRestrictFlagFields(Class<?> clazz) throws Exception {
return restrictFlagMap.get(assignableFrom(clazz));
}
}
package com.x.base.core.container.factory;
import java.io.File;
import java.io.FileWriter;
import java.lang.reflect.Field;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Id;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.reflect.FieldUtils;
import org.apache.openjpa.persistence.OpenJPAPersistence;
import org.apache.openjpa.persistence.PersistenceProductDerivation;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckPersist;
import com.x.base.core.entity.annotation.CheckRemove;
import com.x.base.core.entity.annotation.Flag;
import com.x.base.core.entity.annotation.RestrictFlag;
import com.x.base.core.project.config.DataMappings;
public abstract class SliceEntityManagerContainerFactory {
protected static String persistence_xml_path = "META-INF/x_persistence.xml";
/* class 与 entityManagerFactory 映射表 */
protected Map<Class<? extends JpaObject>, EntityManagerFactory> entityManagerFactoryMap = new ConcurrentHashMap<Class<? extends JpaObject>, EntityManagerFactory>();
/* class 与 @Flag字段 映射表 */
protected Map<Class<? extends JpaObject>, List<Field>> flagMap = new ConcurrentHashMap<Class<? extends JpaObject>, List<Field>>();
/* class 与 entityManagerFactory 映射表 */
protected Map<Class<? extends JpaObject>, List<Field>> restrictFlagMap = new ConcurrentHashMap<Class<? extends JpaObject>, List<Field>>();
/* class 与 class 中需要检查 Persist 字段的对应表 */
protected Map<Class<? extends JpaObject>, Map<Field, CheckPersist>> checkPersistFieldMap = new ConcurrentHashMap<Class<? extends JpaObject>, Map<Field, CheckPersist>>();
/* class 与 class 中需要检查 Remove 字段的对应表 */
protected Map<Class<? extends JpaObject>, Map<Field, CheckRemove>> checkRemoveFieldMap = new ConcurrentHashMap<Class<? extends JpaObject>, Map<Field, CheckRemove>>();
protected SliceEntityManagerContainerFactory(String webApplicationDirectory, DataMappings dataMappings)
throws Exception {
Set<Class<? extends JpaObject>> classes = mergePersistenceXml(webApplicationDirectory, dataMappings);
for (Class<? extends JpaObject> clz : classes) {
checkPersistFieldMap.put(clz, this.loadCheckPersistField(clz));
checkRemoveFieldMap.put(clz, loadCheckRemoveField(clz));
entityManagerFactoryMap.put(clz,
OpenJPAPersistence.createEntityManagerFactory(clz.getCanonicalName(), persistence_xml_path));
flagMap.put(clz, new ArrayList<Field>());
restrictFlagMap.put(clz, new ArrayList<Field>());
for (Field o : FieldUtils.getFieldsListWithAnnotation(clz, Id.class)) {
flagMap.get(clz).add(o);
restrictFlagMap.get(clz).add(o);
}
for (Field o : FieldUtils.getFieldsListWithAnnotation(clz, Flag.class)) {
flagMap.get(clz).add(o);
restrictFlagMap.get(clz).add(o);
}
for (Field o : FieldUtils.getFieldsListWithAnnotation(clz, RestrictFlag.class)) {
restrictFlagMap.get(clz).add(o);
}
}
}
protected SliceEntityManagerContainerFactory(String source) throws Exception {
Set<Class<? extends JpaObject>> classes = this.listUitClass(source);
for (Class<? extends JpaObject> clz : classes) {
checkPersistFieldMap.put(clz, this.loadCheckPersistField(clz));
checkRemoveFieldMap.put(clz, loadCheckRemoveField(clz));
entityManagerFactoryMap.put(clz,
OpenJPAPersistence.createEntityManagerFactory(clz.getCanonicalName(), source));
}
}
/** 扫描受管实体,生成 x_perisitence.xml */
@SuppressWarnings("unchecked")
private Set<Class<? extends JpaObject>> mergePersistenceXml(String webApplicationDirectory,
DataMappings dataMappings) throws Exception {
String name = null;
try {
Set<Class<? extends JpaObject>> classes = new HashSet<>();
File file = new File(webApplicationDirectory + "/WEB-INF/classes/" + persistence_xml_path);
SAXReader reader = new SAXReader();
Document document = reader.read(file);
for (Object o : document.getRootElement().elements("persistence-unit")) {
Element unit = (Element) o;
name = unit.attribute("name").getValue();
// System.out.println("try to load entity class:" + name);
Element properties = unit.element("properties");
if (null != properties) {
properties.clearContent();
} else {
properties = unit.addElement("properties");
}
for (Entry<String, String> entry : SlicePropertiesBuilder.getPropertiesDBCP(dataMappings.get(name))
.entrySet()) {
Element property = properties.addElement("property");
property.addAttribute("name", entry.getKey());
property.addAttribute("value", entry.getValue());
}
classes.add((Class<JpaObject>) Class.forName(name));
}
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileWriter(file), format);
writer.write(document);
writer.close();
return classes;
} catch (Exception e) {
throw new Exception("registContainerEntity error.className:" + name, e);
}
}
@SuppressWarnings("unchecked")
public <T> Class<T> assignableFrom(Class<T> cls) throws Exception {
for (Class<?> clazz : this.entityManagerFactoryMap.keySet()) {
if (clazz.isAssignableFrom(cls)) {
return (Class<T>) clazz;
}
}
throw new Exception("can not find jpa assignable class for " + cls + ".");
}
private <T extends JpaObject> Map<Field, CheckPersist> loadCheckPersistField(Class<T> cls) throws Exception {
Map<Field, CheckPersist> map = new HashMap<Field, CheckPersist>();
for (Field fld : cls.getDeclaredFields()) {
CheckPersist checkPersist = fld.getAnnotation(CheckPersist.class);
if (null != checkPersist) {
map.put(fld, checkPersist);
}
}
return map;
}
private <T extends JpaObject> Map<Field, CheckRemove> loadCheckRemoveField(Class<T> cls) throws Exception {
Map<Field, CheckRemove> map = new HashMap<Field, CheckRemove>();
for (Field fld : cls.getDeclaredFields()) {
CheckRemove checkRemove = fld.getAnnotation(CheckRemove.class);
if (null != checkRemove) {
map.put(fld, checkRemove);
}
}
return map;
}
private Set<Class<? extends JpaObject>> listUitClass(String source) throws Exception {
try {
Set<Class<? extends JpaObject>> classes = new HashSet<>();
URL url;
if (StringUtils.isEmpty(source)) {
url = this.getClass().getClassLoader().getResource(PersistenceProductDerivation.RSRC_DEFAULT);
} else {
url = this.getClass().getClassLoader().getResource(source);
}
if (null == url) {
throw new Exception("can not load resource: " + source + ".");
}
File file = new File(url.toURI());
SAXReader reader = new SAXReader();
Document document = reader.read(file);
for (Object o : document.getRootElement().elements("persistence-unit")) {
Element unit = (Element) o;
classes.add((Class<JpaObject>) Class.forName(unit.attribute("name").getValue()));
}
return classes;
} catch (Exception e) {
throw new Exception("list unit error:" + source, e);
}
}
}
\ No newline at end of file
package com.x.base.core.container.factory;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import com.alibaba.druid.pool.DruidDataSource;
import com.x.base.core.container.FactorDistributionPolicy;
import com.x.base.core.project.config.DataMapping;
public class SlicePropertiesBuilder {
// 20160127要做的事情,删除应用要删除数据字典和work,目前已经删除了信泰的数据字典重复部分,没有来得及删除数据
public static String driver_db2 = "com.ibm.db2.jcc.DB2Driver";
public static String driver_oracle = "oracle.jdbc.OracleDriver";
public static String driver_mysql = "com.mysql.jdbc.Driver";
public static String driver_postgresql = "org.postgresql.Driver";
public static String driver_informix = "com.informix.jdbc.IfxDriver";
public static String driver_h2 = "org.h2.Driver";
public static String driver_dm = "dm.jdbc.driver.DmDriver";
public static String driver_sqlserver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
/** 避免db2在aix版本和lwl版本字段长度不一致的问题 */
private static String dictionary_db2 = "db2(createPrimaryKeys=false,characterColumnSize=255,maxColumnNameLength=128,maxIndexNameLength=128,maxConstraintNameLength=128)";
private static String dictionary_oracle = "oracle(maxTableNameLength=128,maxColumnNameLength=128,maxIndexNameLength=128,maxConstraintNameLength=128,maxEmbeddedClobSize=104857600)";
private static String dictionary_mysql = "mysql(clobTypeName=LONGTEXT,blobTypeName=LONGBLOB,createPrimaryKeys=false,maxIndexesPerTable=64)";
private static String dictionary_postgresql = "postgres";
private static String dictionary_informix = "informix";
private static String dictionary_h2 = "org.apache.openjpa.jdbc.sql.H2Dictionary";
private static String dictionary_dm = "com.x.base.core.openjpa.jdbc.sql.DMDictionary";
private static String dictionary_sqlserver = "sqlserver(schemaCase=preserve)";
private static String validationQuery_db2 = "select 1 from sysibm.sysdummy1";
private static String validationQuery_oracle = "select 1 from dual";
private static String validationQuery_mysql = "select 1";
private static String validationQuery_postgresql = "select 1";
private static String validationQuery_informix = "select 1";
private static String validationQuery_h2 = "select 1";
private static String validationQuery_dm = "select getdate()";
private static String validationQuery_sqlserver = "select 1";
public static Map<String, String> getPropertiesDBCP(List<DataMapping> list) throws Exception {
try {
if (list.isEmpty()) {
throw new Exception("parameter data list is empty.");
}
Map<String, String> properties = new LinkedHashMap<String, String>();
properties.put("openjpa.BrokerFactory", "slice");
properties.put("openjpa.jdbc.DBDictionary", determineDBDictionary(list.get(0)));
/**
* 如果是DB2 添加 Schema,mysql 不需要Schema 如果用了Schema H2数据库就会报错说没有Schema
*/
if (StringUtils.equals(determineDBDictionary(list.get(0)), dictionary_db2)) {
properties.put("openjpa.jdbc.Schema", "x");
}
if (StringUtils.equals(determineDBDictionary(list.get(0)), dictionary_informix)) {
properties.put("openjpa.jdbc.Schema", "x");
}
properties.put("openjpa.slice.Lenient", "false");
// properties.put("openjpa.Multithreaded", "true");
properties.put("openjpa.slice.DistributionPolicy", FactorDistributionPolicy.class.getName());
properties.put("openjpa.slice.Names", getSliceNames(list));
// properties.put("openjpa.ConnectionDriverName",
// org.apache.commons.dbcp2.BasicDataSource.class.getName());
properties.put("openjpa.ConnectionDriverName", DruidDataSource.class.getName());
// properties.put("openjpa.ConnectionDriverName",
// org.apache.commons.dbcp2.managed.BasicManagedDataSource.class.getCanonicalName());
properties.put("openjpa.QueryCompilationCache", "false");
properties.put("openjpa.IgnoreChanges", "true");
properties.put("openjpa.QueryCache", "false");
properties.put("openjpa.jdbc.ResultSetType", "scroll-insensitive");
// properties.put("openjpa.DynamicEnhancementAgent", "true");
properties.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=false)");
// properties.put("openjpa.jdbc.SchemaFactory",
// "native(ForeignKeys=false)");
// properties.put("openjpa.Compatibility",
// "StrictIdentityValues=true");
/* 事务管理 */
// properties.put("openjpa.ManagedRuntime",
// "jndi(TransactionManagerName=java:/TransactionManager)");
/* 锁 */
properties.put("openjpa.LockManager", "none");
properties.put("openjpa.Log", "DefaultLevel=WARN");
for (int i = 0; i < list.size(); i++) {
String slice = getName(i);
DataMapping dataMapping = list.get(i);
properties.put("openjpa.slice." + slice + ".ConnectionProperties",
getConnectionPropertiesDruid(dataMapping));
// properties.put("openjpa.slice." + slice +
// ".ConnectionDriverName",
// org.apache.commons.dbcp.BasicDataSource.class.getCanonicalName());
properties.put("openjpa.slice." + slice + ".ConnectionDriverName", DruidDataSource.class.getName());
// properties.put("openjpa.slice." + slice +
// ".ConnectionDriverName",
// org.apache.commons.dbcp2.managed.BasicManagedDataSource.class.getCanonicalName());
properties.put("openjpa.slice." + slice + ".Log", getLog(dataMapping));
properties.put("openjpa.slice." + slice + ".IgnoreChanges", "true");
properties.put("openjpa.slice." + slice + ".QueryCache", "false");
properties.put("openjpa.slice." + slice + ".QueryCompilationCache", "false");
properties.put("openjpa.slice." + slice + ".LockManager", "none");
properties.put("openjpa.slice." + slice + ".ConnectionFactoryProperties",
"PrettyPrint=true, PrettyPrintLineLength=72");
}
return properties;
} catch (Exception e) {
throw new Exception("can not convert connection to slice properties", e);
}
}
// openjpa.slice.Names 属性值
public static String getSliceNames(List<DataMapping> list) throws Exception {
try {
String[] arr = new String[list.size()];
for (int j = 0; j < list.size(); j++) {
arr[j] = getName(j);
}
return StringUtils.join(arr, ", ");
} catch (Exception e) {
throw new Exception("can not create slice names", e);
}
}
// 单个slice名称
public static String getName(Integer i) throws Exception {
try {
return "s" + ((1001 + i) + "").substring(1);
} catch (Exception e) {
throw new Exception("can not create slice name property", e);
}
}
// /* 使用DBCP连接池时产生的属性 */
// protected static String getConnectionPropertiesDBCP(DataMapping dataMapping)
// throws Exception {
// try {
// String str = "MaxActive=5, MaxIdle=1, MinIdle=0, MaxWait=10000, Username=" +
// dataMapping.getUsername()
// + ", Password=" + dataMapping.getPassword() + ", TestOnBorrow=true";
// if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_db2)) {
// str += ", driverClassName=" + driver_db2 + ", url=" + dataMapping.getUrl();
// } else if (StringUtils.equals(determineDBDictionary(dataMapping),
// dictionary_mysql)) {
// String url = dataMapping.getUrl();
// // url += "?autoReconnect=true";
// str += ", driverClassName=" + driver_mysql + ", url=" + url;
// } else if (StringUtils.equals(determineDBDictionary(dataMapping),
// dictionary_postgresql)) {
// String url = dataMapping.getUrl();
// str += ", driverClassName=" + driver_postgresql + ", url=" + url;
// } else if (StringUtils.equals(determineDBDictionary(dataMapping),
// dictionary_informix)) {
// String url = dataMapping.getUrl();
// str += ", driverClassName=" + driver_informix + ", url=" + url;
// } else if (StringUtils.equals(determineDBDictionary(dataMapping),
// dictionary_h2)) {
// String url = dataMapping.getUrl();
// str += ", driverClassName=" + driver_h2 + ", url=" + url;
// }
// return str;
// } catch (Exception e) {
// throw new Exception("can not create connection properites", e);
// }
// }
/* 使用DBCP2连接池时产生的属性 */
protected static String getConnectionPropertiesDBCP2(DataMapping dataMapping) throws Exception {
try {
String str = "maxTotal=5, maxIdle=2, minIdle=0, maxWaitMillis=30000, timeBetweenEvictionRunsMillis=300000, minEvictableIdleTimeMillis=300000, maxConnLifetimeMillis=1200000, Username="
+ dataMapping.getUsername() + ", Password=" + dataMapping.getPassword();
if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_db2)) {
str += ",validationQuery=" + validationQuery_db2 + ", driverClassName=" + driver_db2 + ", url="
+ dataMapping.getUrl();
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_oracle)) {
String url = dataMapping.getUrl();
str += ",validationQuery=" + validationQuery_oracle + ", driverClassName=" + driver_oracle + ", url="
+ url;
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_mysql)) {
String url = dataMapping.getUrl();
// url += "?autoReconnect=true";
str += ",validationQuery=" + validationQuery_mysql + ", driverClassName=" + driver_mysql + ", url="
+ url;
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_postgresql)) {
String url = dataMapping.getUrl();
str += ",validationQuery=" + validationQuery_postgresql + ", driverClassName=" + driver_postgresql
+ ", url=" + url;
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_informix)) {
String url = dataMapping.getUrl();
str += ",validationQuery=" + validationQuery_informix + ", driverClassName=" + driver_informix
+ ", url=" + url;
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_h2)) {
String url = dataMapping.getUrl();
str += ",validationQuery=" + validationQuery_h2 + ", driverClassName=" + driver_h2 + ", url=" + url;
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_dm)) {
String url = dataMapping.getUrl();
str += ",validationQuery=" + validationQuery_oracle + ", driverClassName=" + driver_dm + ", url=" + url;
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_sqlserver)) {
String url = dataMapping.getUrl();
str += ",validationQuery=" + validationQuery_sqlserver + ", driverClassName=" + driver_sqlserver
+ ", url=" + url;
}
return str;
} catch (Exception e) {
throw new Exception("can not create connection properites", e);
}
}
/* 使用Druid连接池时产生的属性 */
protected static String getConnectionPropertiesDruid(DataMapping dataMapping) throws Exception {
try {
String str = "filters=stat, poolPreparedStatements=true, maxActive=5, minIdle=0, testOnBorrow=true, Username="
+ dataMapping.getUsername() + ", Password=" + dataMapping.getPassword();
// String str = "filters=stat, poolPreparedStatements=true,
// maxActive=20, minIdle=0, timeBetweenEvictionRunsMillis=100000,
// minEvictableIdleTimeMillis=300000, Username="
// + dataMapping.getUsername() + ", Password=" +
// dataMapping.getPassword();
if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_db2)) {
str += ", validationQuery=" + validationQuery_db2 + ", driverClassName=" + driver_db2 + ", url="
+ dataMapping.getUrl();
}
if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_oracle)) {
str += ", validationQuery=" + validationQuery_oracle + ", driverClassName=" + driver_oracle + ", url="
+ dataMapping.getUrl();
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_mysql)) {
String url = dataMapping.getUrl();
// url += "?autoReconnect=true";
str += ", validationQuery=" + validationQuery_mysql + ", driverClassName=" + driver_mysql + ", url="
+ url;
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_postgresql)) {
String url = dataMapping.getUrl();
str += ", validationQuery=" + validationQuery_postgresql + ", driverClassName=" + driver_postgresql
+ ", url=" + url;
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_informix)) {
String url = dataMapping.getUrl();
str += ", validationQuery=" + validationQuery_informix + ", driverClassName=" + driver_informix
+ ", url=" + url;
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_h2)) {
String url = dataMapping.getUrl();
str += ", validationQuery=" + validationQuery_h2 + ", driverClassName=" + driver_h2 + ", url=" + url;
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_dm)) {
String url = dataMapping.getUrl();
str += ", validationQuery=" + validationQuery_dm + ", driverClassName=" + driver_dm + ", url=" + url;
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_sqlserver)) {
String url = dataMapping.getUrl();
str += ", validationQuery=" + validationQuery_sqlserver + ", driverClassName=" + driver_sqlserver
+ ", url=" + url;
}
return str;
} catch (Exception e) {
throw new Exception("can not create connection properites", e);
}
}
/* 获取驱动名称 */
public static String getConnectionDriverName(DataMapping dataMapping) throws Exception {
try {
if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_db2)) {
return driver_db2;
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_oracle)) {
return driver_oracle;
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_mysql)) {
return driver_mysql;
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_postgresql)) {
return driver_postgresql;
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_informix)) {
return driver_informix;
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_h2)) {
return driver_h2;
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_dm)) {
return driver_dm;
} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_sqlserver)) {
return driver_sqlserver;
}
throw new Exception("database jdbc driver miss match:" + dataMapping.getUrl());
} catch (Exception e) {
throw new Exception("can not get driverClassName property", e);
}
}
/** 获取日志属性 */
protected static String getLog(DataMapping dataMapping) throws Exception {
try {
return "Tool=" + dataMapping.getToolLevel() + ", Enhance=" + dataMapping.getEnhanceLevel() + ", METADATA="
+ dataMapping.getMetaDataLevel() + ", RUNTIME=" + dataMapping.getRuntimeLevel() + ", Query="
+ dataMapping.getQueryLevel() + ", DataCache=" + dataMapping.getDataCacheLevel() + ", JDBC="
+ dataMapping.getJdbcLevel() + ", SQL=" + dataMapping.getSqlLevel();
} catch (Exception e) {
throw new Exception("can not get log property.", e);
}
}
public static String determineDBDictionary(DataMapping dataMapping) throws Exception {
try {
if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:db2:")) {
return dictionary_db2;
} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:oracle:")) {
return dictionary_oracle;
} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:mysql:")) {
return dictionary_mysql;
} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:postgresql:")) {
return dictionary_postgresql;
} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:informix-sqli:")) {
return dictionary_informix;
} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:h2:tcp:")) {
return dictionary_h2;
} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:dm:")) {
return dictionary_dm;
} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:sqlserver:")) {
return dictionary_sqlserver;
}
throw new Exception("database jdbc driver miss match:" + dataMapping.getUrl());
} catch (Exception e) {
throw new Exception("can not get driverClassName property", e);
}
}
}
\ No newline at end of file
package com.x.base.core.entity;
public class AbstractPersistenceProperties {
public static final String defaultUnit = "x";
public static final String schema = "X";
public static final String orderColumn = "xorderColumn";
//public static final String xmlStrategy = "com.x.core.entity.xml.strats.XStreamValueHandler";
public static final int file_name_length = JpaObject.length_255B;
public static final int organization_name_length = JpaObject.length_255B;
public static final int processPlatform_name_length = JpaObject.length_255B;
public static final int processPlatform_title_length = JpaObject.length_255B;
public static final int component_name_length = JpaObject.length_255B;
public static final int length_sequence = JpaObject.length_128B;
}
\ No newline at end of file
package com.x.base.core.entity;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Lob;
import javax.persistence.MappedSuperclass;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.reflect.FieldUtils;
import org.apache.openjpa.persistence.jdbc.ContainerTable;
import com.x.base.core.entity.annotation.Flag;
import com.x.base.core.entity.annotation.RestrictFlag;
import com.x.base.core.project.annotation.FieldDescribe;
import com.x.base.core.project.gson.GsonPropertyObject;
import com.x.base.core.project.gson.XGsonBuilder;
import com.x.base.core.project.tools.DateTools;
import com.x.base.core.project.tools.ListTools;
@MappedSuperclass
public abstract class JpaObject extends GsonPropertyObject implements Serializable {
private static final long serialVersionUID = 2809501197843500002L;
public static String createId() {
return UUID.randomUUID().toString();
}
abstract public void onPersist() throws Exception;
public static final String ColumnNamePrefix = "x";
public static final String IndexNameMiddle = "_";
public static final String JoinIndexNameSuffix = "_join";
public static final String ElementIndexNameSuffix = "_element";
public static final String ContainerTableNameMiddle = "_";
public static final String DefaultUniqueConstraintSuffix = "DUC";
abstract public String getId();
abstract public void setId(String id);
// abstract public Date getCreateTime();
//
// abstract public void setCreateTime(Date createTime);
//
// abstract public Date getUpdateTime();
//
// abstract public void setUpdateTime(Date updateTime);
//
// abstract public String getSequence();
//
// abstract public void setSequence(String sequence);
public static final String id_FIELDNAME = "id";
public static final String createTime_FIELDNAME = "createTime";
public static final String updateTime_FIELDNAME = "updateTime";
public static final String sequence_FIELDNAME = "sequence";
public static final String distributeFactor_FIELDNAME = "distributeFactor";
public static final String password_FIELDNAME = "password";
public static final String scratchString_FIELDNAME = "scratchString";
public static final String scratchBoolean_FIELDNAME = "scratchBoolean";
public static final String scratchDate_FIELDNAME = "scratchDate";
public static final String scratchInteger_FIELDNAME = "scratchInteger";
public static final List<String> FieldsUnmodify = ListUtils.unmodifiableList(Arrays.asList(id_FIELDNAME,
distributeFactor_FIELDNAME, createTime_FIELDNAME, updateTime_FIELDNAME, sequence_FIELDNAME,
scratchString_FIELDNAME, scratchBoolean_FIELDNAME, scratchDate_FIELDNAME, scratchInteger_FIELDNAME));
public static final List<String> FieldsUnmodifyExcludeId = ListUtils.unmodifiableList(Arrays.asList(
distributeFactor_FIELDNAME, createTime_FIELDNAME, updateTime_FIELDNAME, sequence_FIELDNAME,
scratchString_FIELDNAME, scratchBoolean_FIELDNAME, scratchDate_FIELDNAME, scratchInteger_FIELDNAME));
public static final List<String> FieldsInvisible = ListUtils.unmodifiableList(
Arrays.asList(distributeFactor_FIELDNAME, sequence_FIELDNAME, password_FIELDNAME, scratchString_FIELDNAME,
scratchBoolean_FIELDNAME, scratchDate_FIELDNAME, scratchInteger_FIELDNAME));
@FieldDescribe("创建时间,自动生成,索引创建在约束中.")
@Column(name = ColumnNamePrefix + createTime_FIELDNAME)
private Date createTime;
@FieldDescribe("修改时间,自动生成,索引创建在约束中.")
@Column(name = ColumnNamePrefix + updateTime_FIELDNAME)
private Date updateTime;
@FieldDescribe("列表序号,由创建时间以及ID组成.在保存时自动生成,索引创建在约束中.")
@Column(length = JpaObject.length_128B, name = ColumnNamePrefix + sequence_FIELDNAME)
private String sequence;
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public String getSequence() {
return sequence;
}
public void setSequence(String sequence) {
this.sequence = sequence;
}
/* 暂存String */
@Column(length = length_255B, name = ColumnNamePrefix + scratchString_FIELDNAME)
private String scratchString;
/* 暂存Boolean */
@Column(name = ColumnNamePrefix + scratchBoolean_FIELDNAME)
private Boolean scratchBoolean;
/* 暂存Date */
@Column(name = ColumnNamePrefix + scratchDate_FIELDNAME)
private Date scratchDate;
/* 暂存Integer */
@Column(name = ColumnNamePrefix + scratchInteger_FIELDNAME)
private Date scratchInteger;
public String getScratchString() {
return scratchString;
}
public void setScratchString(String scratchString) {
this.scratchString = scratchString;
}
public Boolean getScratchBoolean() {
return scratchBoolean;
}
public void setScratchBoolean(Boolean scratchBoolean) {
this.scratchBoolean = scratchBoolean;
}
public Date getScratchDate() {
return scratchDate;
}
public void setScratchDate(Date scratchDate) {
this.scratchDate = scratchDate;
}
public Date getScratchInteger() {
return scratchInteger;
}
public void setScratchInteger(Date scratchInteger) {
this.scratchInteger = scratchInteger;
}
public static final int length_1B = 1;
public static final int length_2B = 2;
public static final int length_4B = 4;
public static final int length_8B = 8;
public static final int length_16B = 16;
public static final int length_32B = 32;
public static final int length_64B = 64;
public static final int length_96B = 96;
public static final int length_128B = 128;
public static final int length_255B = 255;
public static final int length_1K = 1024;
public static final int length_2K = 1024 * 2;
public static final int length_4K = 1024 * 4;
public static final int length_8K = 1024 * 8;
public static final int length_16K = 1024 * 16;
public static final int length_32K = 1024 * 32;
public static final int length_64K = 1024 * 64;
public static final int length_128K = 1024 * 128;
public static final int length_1M = 1048576;
public static final int length_10M = 1048576 * 10;
public static final int length_20M = 1048576 * 20;
public static final int length_50M = 1048576 * 50;
public static final int length_100M = length_10M * 10;
public static final int length_1G = 1073741824;
public static final int length_id = length_64B;
public static final String IDCOLUMN = "xid";
public static final String CREATETIMECOLUMN = "xcreateTime";
public static final String UPDATETIMECOLUMN = "xupdateTime";
public static final String SEQUENCECOLUMN = "xsequence";
public static final String DISTINGUISHEDNAME = "distinguishedName";
public static final String[] ID_DISTRIBUTEFACTOR = new String[] { id_FIELDNAME, distributeFactor_FIELDNAME };
public List<String> flagValues() throws Exception {
List<String> values = new ArrayList<>();
values.add(this.getId());
for (Field f : FieldUtils.getFieldsListWithAnnotation(this.getClass(), Flag.class)) {
values.add(PropertyUtils.getProperty(this, f.getName()).toString());
}
return ListTools.trim(values, true, true);
}
public List<String> restrictFlagValues() throws Exception {
List<String> values = this.flagValues();
for (Field f : FieldUtils.getFieldsListWithAnnotation(this.getClass(), RestrictFlag.class)) {
values.add(PropertyUtils.getProperty(this, f.getName()).toString());
}
return ListTools.trim(values, true, true);
}
public Object get(String name) throws Exception {
return PropertyUtils.getProperty(this, name);
}
@SuppressWarnings("unchecked")
public <T> T get(String name, Class<T> clazz) throws Exception {
Object o = get(name);
if (null == o) {
return null;
}
return (T) o;
}
public int hashCode() {
return 31 + ((this.getId() == null) ? 0 : this.getId().hashCode());
}
public boolean equals(Object o) {
if (null == o) {
return false;
}
if (!(o instanceof JpaObject)) {
return false;
} else {
return this.getId().equalsIgnoreCase(((JpaObject) o).getId());
}
}
public static <T extends JpaObject> List<String> singularAttributeField(Class<T> clz, Boolean excludeInvisible,
Boolean excludeLob) {
List<String> names = new ArrayList<>();
for (Field field : FieldUtils.getFieldsListWithAnnotation(clz, Column.class)) {
if (null == field.getAnnotation(ContainerTable.class)) {
if (BooleanUtils.isTrue(excludeInvisible) && FieldsInvisible.contains(field.getName())) {
continue;
}
if (BooleanUtils.isTrue(excludeLob) && (null != field.getAnnotation(Lob.class))) {
continue;
}
names.add(field.getName());
}
}
return names;
}
public String nameOfEntity() {
String name = this.getClass().getSimpleName();
return name;
}
@PrePersist
public void prePersist() throws Exception {
if (StringUtils.isEmpty(this.getId())) {
throw new Exception("basePrePersist error, id is empty, entity class:" + this.getClass().getName()
+ ", entity content:" + XGsonBuilder.toJson(this) + ".");
}
Date date = new Date();
if (null == this.getCreateTime()) {
this.setCreateTime(date);
}
this.setUpdateTime(date);
if (StringUtils.isEmpty(this.getSequence())) {
this.setSequence(StringUtils.join(DateTools.compact(this.getCreateTime()), this.getId()));
}
this.onPersist();
}
@PreUpdate
public void preUpdate() throws Exception {
if (StringUtils.isEmpty(this.getId())) {
throw new Exception("basePreUpdate error, id is empty, entity class:" + this.getClass().getName()
+ ", entity content:" + XGsonBuilder.toJson(this) + ".");
}
this.setUpdateTime(new Date());
if (StringUtils.isEmpty(this.getSequence())) {
this.setSequence(StringUtils.join(DateTools.compact(this.getCreateTime()), this.getId()));
}
this.onPersist();
}
}
\ No newline at end of file
/**
* Generated by OpenJPA MetaModel Generator Tool.
**/
package com.x.base.core.entity;
import java.lang.Boolean;
import java.lang.String;
import java.util.Date;
import javax.persistence.metamodel.SingularAttribute;
@javax.persistence.metamodel.StaticMetamodel
(value=com.x.base.core.entity.JpaObject.class)
@javax.annotation.Generated
(value="org.apache.openjpa.persistence.meta.AnnotationProcessor6",date="Fri Dec 14 16:02:59 CST 2018")
public class JpaObject_ {
public static volatile SingularAttribute<JpaObject,Date> createTime;
public static volatile SingularAttribute<JpaObject,Boolean> scratchBoolean;
public static volatile SingularAttribute<JpaObject,Date> scratchDate;
public static volatile SingularAttribute<JpaObject,Date> scratchInteger;
public static volatile SingularAttribute<JpaObject,String> scratchString;
public static volatile SingularAttribute<JpaObject,String> sequence;
public static volatile SingularAttribute<JpaObject,Date> updateTime;
}
package com.x.base.core.entity;
import javax.persistence.Column;
import javax.persistence.MappedSuperclass;
import com.x.base.core.project.annotation.FieldDescribe;
@MappedSuperclass
public abstract class SliceJpaObject extends JpaObject {
private static final long serialVersionUID = 805690971791595604L;
@FieldDescribe("分布式存储标识位.")
@Column(name = ColumnNamePrefix + distributeFactor_FIELDNAME)
protected Integer distributeFactor;
public Integer getDistributeFactor() {
return distributeFactor;
}
public void setDistributeFactor(Integer distributeFactor) {
this.distributeFactor = distributeFactor;
}
// protected void concreteDistributeFactor() {
// if (null == this.distributeFactor) {
// this.distributeFactor = (new Random()).nextInt(1000);
// }
// }
}
\ No newline at end of file
/**
* Generated by OpenJPA MetaModel Generator Tool.
**/
package com.x.base.core.entity;
import java.lang.Integer;
import javax.persistence.metamodel.SingularAttribute;
@javax.persistence.metamodel.StaticMetamodel
(value=com.x.base.core.entity.SliceJpaObject.class)
@javax.annotation.Generated
(value="org.apache.openjpa.persistence.meta.AnnotationProcessor6",date="Fri Dec 14 16:02:59 CST 2018")
public class SliceJpaObject_ extends JpaObject_ {
public static volatile SingularAttribute<SliceJpaObject,Integer> distributeFactor;
}
package com.x.base.core.entity;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(value = ElementType.TYPE)
@Inherited
public @interface Storage {
StorageType type();
}
\ No newline at end of file
package com.x.base.core.entity;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Date;
import javax.persistence.MappedSuperclass;
import javax.persistence.Transient;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.vfs2.CacheStrategy;
import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemManager;
import org.apache.commons.vfs2.FileSystemOptions;
import org.apache.commons.vfs2.cache.NullFilesCache;
import org.apache.commons.vfs2.impl.StandardFileSystemManager;
import org.apache.commons.vfs2.provider.ftp.FtpFileSystemConfigBuilder;
import org.apache.commons.vfs2.provider.ftp.FtpFileType;
import com.x.base.core.project.config.Config;
import com.x.base.core.project.config.StorageMapping;
import com.x.base.core.project.tools.DefaultCharset;
@MappedSuperclass
public abstract class StorageObject extends SliceJpaObject {
private static FileSystemManager FILESYSTEMANAGERINSTANCE;
private FileSystemManager getFileSystemManager() throws Exception {
if (FILESYSTEMANAGERINSTANCE == null) {
synchronized (StorageObject.class) {
if (FILESYSTEMANAGERINSTANCE == null) {
StandardFileSystemManager fs = new StandardFileSystemManager();
// DefaultFileSystemManager fs = new
// DefaultFileSystemManager();
// File file = new File(Config.base(), "local/temp/vfs");
// FileUtils.forceMkdir(file);
// fs.setTemporaryFileStore(new
// DefaultFileReplicator(file));
fs.setFilesCache(new NullFilesCache());
fs.setCacheStrategy(CacheStrategy.ON_RESOLVE);
fs.init();
FILESYSTEMANAGERINSTANCE = fs;
}
}
}
return FILESYSTEMANAGERINSTANCE;
}
private static final long serialVersionUID = 7823729771901802653L;
public static final String PATHSEPARATOR = "/";
abstract public String path() throws Exception;
abstract public String getStorage();
abstract public void setStorage(String storage);
abstract public Long getLength();
abstract public void setLength(Long length);
abstract public String getName();
abstract public void setName(String name);
abstract public String getExtension();
abstract public void setExtension(String extension);
abstract public Date getLastUpdateTime();
abstract public void setLastUpdateTime(Date lastUpdateTime);
@Transient
private byte[] bytes;
public byte[] getBytes() {
return bytes;
}
public void setBytes(byte[] bytes) {
this.bytes = bytes;
}
/** 将内容导入到bytes字段,用于进行导入导出 */
public Long dumpContent(StorageMapping mapping) throws Exception {
long length = -1L;
try (ByteArrayOutputStream output = new ByteArrayOutputStream()) {
length = this.readContent(mapping, output);
if (length < 0) {
this.setBytes(new byte[] {});
} else {
this.setBytes(output.toByteArray());
}
}
return length;
}
/** 将导入的字节进行保存 */
public Long saveContent(StorageMapping mapping, byte[] bytes, String name) throws Exception {
try (ByteArrayInputStream bais = new ByteArrayInputStream(bytes)) {
return saveContent(mapping, bais, name);
}
}
/** 将导入的流进行保存 */
public Long saveContent(StorageMapping mapping, InputStream input, String name) throws Exception {
this.setName(name);
this.setExtension(StringUtils.lowerCase(FilenameUtils.getExtension(name)));
return this.updateContent(mapping, input);
}
/** 更新Content内容 */
public Long updateContent(StorageMapping mapping, byte[] bytes) throws Exception {
try (ByteArrayInputStream bais = new ByteArrayInputStream(bytes)) {
return updateContent(mapping, bais);
}
}
/** 更新Content内容 */
public Long updateContent(StorageMapping mapping, byte[] bytes, String name) throws Exception {
try (ByteArrayInputStream bais = new ByteArrayInputStream(bytes)) {
if (StringUtils.isNotEmpty(name)) {
this.setName(name);
this.setExtension(StringUtils.lowerCase(FilenameUtils.getExtension(name)));
}
return updateContent(mapping, bais);
}
}
/** 更新Content内容 */
public Long updateContent(StorageMapping mapping, InputStream input, String name) throws Exception {
if (StringUtils.isNotEmpty(name)) {
this.setName(name);
this.setExtension(StringUtils.lowerCase(FilenameUtils.getExtension(name)));
}
return updateContent(mapping, input);
}
/** 更新Content内容 */
public Long updateContent(StorageMapping mapping, InputStream input) throws Exception {
long length = -1L;
FileSystemManager manager = this.getFileSystemManager();
String prefix = this.getPrefix(mapping);
String path = this.path();
if (StringUtils.isEmpty(path)) {
throw new Exception("path can not be empty.");
}
FileSystemOptions options = this.getOptions(mapping);
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
/* 由于可以在传输过程中取消传输,先拷贝到内存 */
IOUtils.copyLarge(input, baos);
try (FileObject fo = manager.resolveFile(prefix + PATHSEPARATOR + path, options);
OutputStream output = fo.getContent().getOutputStream()) {
length = IOUtils.copyLarge(new ByteArrayInputStream(baos.toByteArray()), output);
this.setLength(length);
manager.closeFileSystem(fo.getFileSystem());
}
}
this.setStorage(mapping.getName());
this.setLastUpdateTime(new Date());
return length;
}
/** 读出内容 */
public byte[] readContent(StorageMapping mapping) throws Exception {
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
readContent(mapping, baos);
return baos.toByteArray();
}
}
/** 将内容流出到output */
public Long readContent(StorageMapping mapping, OutputStream output) throws Exception {
long length = -1L;
FileSystemManager manager = this.getFileSystemManager();
String prefix = this.getPrefix(mapping);
String path = this.path();
FileSystemOptions options = this.getOptions(mapping);
try (FileObject fo = manager.resolveFile(prefix + PATHSEPARATOR + path, options)) {
if (fo.exists() && fo.isFile()) {
try (InputStream input = fo.getContent().getInputStream()) {
length = IOUtils.copyLarge(input, output);
}
}
manager.closeFileSystem(fo.getFileSystem());
}
return length;
}
/** 检查是否存在内容 */
public boolean existContent(StorageMapping mapping) throws Exception {
FileSystemManager manager = this.getFileSystemManager();
String prefix = this.getPrefix(mapping);
String path = this.path();
FileSystemOptions options = this.getOptions(mapping);
try (FileObject fo = manager.resolveFile(prefix + PATHSEPARATOR + path, options)) {
if (fo.exists() && fo.isFile()) {
return true;
}
return false;
}
}
/** 删除内容,同时判断上一级目录(只判断一级)是否为空,为空则删除上一级目录 */
public void deleteContent(StorageMapping mapping) throws Exception {
FileSystemManager manager = this.getFileSystemManager();
String prefix = this.getPrefix(mapping);
String path = this.path();
FileSystemOptions options = this.getOptions(mapping);
try (FileObject fo = manager.resolveFile(prefix + PATHSEPARATOR + path, options)) {
if (fo.exists() && fo.isFile()) {
fo.delete();
if ((!StringUtils.startsWith(path, PATHSEPARATOR)) && (StringUtils.contains(path, PATHSEPARATOR))) {
FileObject parent = fo.getParent();
if ((null != parent) && parent.exists() && parent.isFolder()) {
if (parent.getChildren().length == 0) {
parent.delete();
}
}
}
}
manager.closeFileSystem(fo.getFileSystem());
}
}
/* 取得完整访问路径的前半部分 */
private String getPrefix(StorageMapping mapping) throws Exception {
String prefix = "";
if (null == mapping.getProtocol()) {
throw new Exception("storage protocol is null.");
}
switch (mapping.getProtocol()) {
// bzip2,file, ftp, ftps, gzip, hdfs, http, https, jar, ram, res, sftp,
// tar, temp, webdav, zip, cifs, mime;
case ftp:
// ftp://[ username[: password]@] hostname[: port][ relative-path]
prefix = "ftp://" + mapping.getUsername() + ":"
+ URLEncoder.encode(mapping.getPassword(), DefaultCharset.name) + "@" + mapping.getHost() + ":"
+ mapping.getPort();
break;
case cifs:
// smb://[ username[: password]@] hostname[: port][ absolute-path]
prefix = "smb://" + mapping.getUsername() + ":"
+ URLEncoder.encode(mapping.getPassword(), DefaultCharset.name) + "@" + mapping.getHost() + ":"
+ mapping.getPort();
break;
default:
break;
}
return prefix;
}
private FileSystemOptions getOptions(StorageMapping mapping) throws Exception {
FileSystemOptions opts = new FileSystemOptions();
if (null == mapping.getProtocol()) {
throw new Exception("storage protocol is null.");
}
switch (mapping.getProtocol()) {
// bzip2,file, ftp, ftps, gzip, hdfs, http, https, jar, ram, res, sftp,
// tar, temp, webdav, zip, cifs, mime;
case ftp:
FtpFileSystemConfigBuilder builder = FtpFileSystemConfigBuilder.getInstance();
/*
* 如果使用被动模式在阿里云centos7下会经常性出现无法连接 Caused by: java.net.ConnectException:
* Connection timed out (Connection timed out) at
* java.net.PlainSocketImpl.socketConnect(Native Method) at
* java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
* at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.
* java:206) at
* java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at
* java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at
* java.net.Socket.connect(Socket.java:589)
*/
builder.setPassiveMode(opts, Config.vfs().getFtp().getPassive());
// builder.setPassiveMode(opts, false);
// builder.setPassiveMode(opts, true);
/** 强制不校验IP */
builder.setRemoteVerification(opts, false);
// FtpFileType.BINARY is the default
builder.setFileType(opts, FtpFileType.BINARY);
builder.setConnectTimeout(opts, 10000);
builder.setSoTimeout(opts, 10000);
builder.setControlEncoding(opts, DefaultCharset.name);
break;
case cifs:
break;
default:
break;
}
return opts;
}
}
\ No newline at end of file
/**
* Generated by OpenJPA MetaModel Generator Tool.
**/
package com.x.base.core.entity;
@javax.persistence.metamodel.StaticMetamodel
(value=com.x.base.core.entity.StorageObject.class)
@javax.annotation.Generated
(value="org.apache.openjpa.persistence.meta.AnnotationProcessor6",date="Fri Dec 14 16:02:59 CST 2018")
public class StorageObject_ extends SliceJpaObject_ {
}
package com.x.base.core.entity;
public enum StorageProtocol {
bzip2, file, ftp, ftps, gzip, hdfs, http, https, jar, ram, res, sftp, tar, temp, webdav, zip, cifs, mime;
public static final int length = JpaObject.length_16B;
}
package com.x.base.core.entity;
public enum StorageType {
file, processPlatform, meeting, calendar, okr, cms, bbs, report, strategyDeploy;
public static final int length = JpaObject.length_32B;
}
\ No newline at end of file
package com.x.base.core.entity.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Inherited
public @interface CheckPersist {
boolean allowEmpty() default true;
boolean allowContainEmpty() default true;
boolean simplyString() default false;
boolean fileNameString() default false;
boolean mailString() default false;
boolean mobileString() default false;
CitationExist[] citationExists() default {};
CitationNotExist[] citationNotExists() default {};
String pattern() default "";
String min() default "";
String max() default "";
String[] excludes() default {};
}
\ No newline at end of file
package com.x.base.core.entity.annotation;
public enum CheckPersistType {
baseOnly, citationOnly, all, none
}
package com.x.base.core.entity.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Inherited
public @interface CheckRemove {
CitationExist[] citationExists() default {};
CitationNotExist[] citationNotExists() default {};
String[] excludes() default {};
}
package com.x.base.core.entity.annotation;
public enum CheckRemoveType {
all, none
}
package com.x.base.core.entity.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import com.x.base.core.entity.JpaObject;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface CitationExist {
Class<? extends JpaObject> type();
String[] fields() default {"id"};
Equal[] equals() default {};
NotEqual[] notEquals() default {};
String[] excludes() default {};
}
package com.x.base.core.entity.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import com.x.base.core.entity.JpaObject;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface CitationNotExist {
Class<? extends JpaObject> type();
String[] fields() default { "id" };
Equal[] equals() default {};
NotEqual[] notEquals() default {};
}
package com.x.base.core.entity.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 用于标识Entity,由于@Entity标识可能扫描到其他的类,所以这里单独用一个标识,表示是自建的类,这样可以在scan 的时候区分
*
* @author zhour
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ContainerEntity {
}
package com.x.base.core.entity.annotation;
public @interface Equal {
String property();
String field();
}
package com.x.base.core.entity.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Inherited
public @interface Flag {
}
\ No newline at end of file
package com.x.base.core.entity.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import com.x.base.core.entity.JpaObject;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Inherited
public @interface IdReference {
Class<? extends JpaObject>[] value();
}
\ No newline at end of file
package com.x.base.core.entity.annotation;
public @interface NotEqual {
String property();
String field();
}
package com.x.base.core.entity.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Inherited
public @interface RestrictFlag {
String[] fields() default {};
}
\ No newline at end of file
package com.x.base.core.entity.dataitem;
import com.x.base.core.entity.JpaObject;
public enum ItemCategory {
pp, cms, bbs, pp_dict;
public static final int length = JpaObject.length_16B;
}
package com.x.base.core.entity.dataitem;
import com.x.base.core.entity.JpaObject;
public enum ItemPrimitiveType {
s, b, n, u;
public static final int length = JpaObject.length_1B;
}
package com.x.base.core.entity.dataitem;
import com.x.base.core.entity.JpaObject;
public enum ItemStringValueType {
s, d, t, dt, u;
public static final int length = JpaObject.length_2B;
}
package com.x.base.core.entity.dataitem;
import com.x.base.core.entity.JpaObject;
public enum ItemType {
o, a, p, n;
public static final int length = JpaObject.length_1B;
}
package com.x.base.core.entity.type;
import com.x.base.core.entity.JpaObject;
public enum GenderType {
f, m, d;
public static final int length=JpaObject.length_1B;
}
package com.x.base.core.project;
public abstract class CoreA extends Compilable {
}
package com.x.base.core.project;
public abstract class CoreC extends Compilable {
}
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册