Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@achaheen
Created September 13, 2018 13:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save achaheen/3bbbd3eaab3462af9875aad6f615b55c to your computer and use it in GitHub Desktop.
Save achaheen/3bbbd3eaab3462af9875aad6f615b55c to your computer and use it in GitHub Desktop.
/target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
<component name="ArtifactManager">
<artifact type="war" name="miniCRM:war">
<output-path>$PROJECT_DIR$/target</output-path>
<root id="archive" name="miniCRM-0.0.1-SNAPSHOT.war">
<element id="artifact" artifact-name="miniCRM:war exploded" />
</root>
</artifact>
</component>
<component name="ArtifactManager">
<artifact type="exploded-war" name="miniCRM:war exploded">
<output-path>$PROJECT_DIR$/target/miniCRM-0.0.1-SNAPSHOT</output-path>
<root id="root">
<element id="directory" name="WEB-INF">
<element id="directory" name="classes">
<element id="module-output" name="miniCRM" />
</element>
<element id="directory" name="lib">
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-starter-data-jpa:1.5.16.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-starter:1.5.16.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot:1.5.16.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-autoconfigure:1.5.16.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-starter-logging:1.5.16.RELEASE" />
<element id="library" level="project" name="Maven: ch.qos.logback:logback-classic:1.1.11" />
<element id="library" level="project" name="Maven: ch.qos.logback:logback-core:1.1.11" />
<element id="library" level="project" name="Maven: org.slf4j:jul-to-slf4j:1.7.25" />
<element id="library" level="project" name="Maven: org.slf4j:log4j-over-slf4j:1.7.25" />
<element id="library" level="project" name="Maven: org.yaml:snakeyaml:1.17" />
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-starter-aop:1.5.16.RELEASE" />
<element id="library" level="project" name="Maven: org.aspectj:aspectjweaver:1.8.13" />
<element id="library" level="project" name="Maven: org.hibernate:hibernate-core:5.0.12.Final" />
<element id="library" level="project" name="Maven: org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final" />
<element id="library" level="project" name="Maven: org.javassist:javassist:3.21.0-GA" />
<element id="library" level="project" name="Maven: antlr:antlr:2.7.7" />
<element id="library" level="project" name="Maven: org.jboss:jandex:2.0.0.Final" />
<element id="library" level="project" name="Maven: dom4j:dom4j:1.6.1" />
<element id="library" level="project" name="Maven: org.hibernate.common:hibernate-commons-annotations:5.0.1.Final" />
<element id="library" level="project" name="Maven: org.hibernate:hibernate-entitymanager:5.0.12.Final" />
<element id="library" level="project" name="Maven: javax.transaction:javax.transaction-api:1.2" />
<element id="library" level="project" name="Maven: org.springframework.data:spring-data-jpa:1.11.15.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework.data:spring-data-commons:1.13.15.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-orm:4.3.19.RELEASE" />
<element id="library" level="project" name="Maven: org.slf4j:jcl-over-slf4j:1.7.25" />
<element id="library" level="project" name="Maven: org.springframework:spring-aspects:4.3.19.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:1.5.16.RELEASE" />
<element id="library" level="project" name="Maven: org.apache.tomcat:tomcat-jdbc:8.5.34" />
<element id="library" level="project" name="Maven: org.apache.tomcat:tomcat-juli:8.5.34" />
<element id="library" level="project" name="Maven: org.springframework:spring-jdbc:4.3.19.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-starter-mail:1.5.16.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-context:4.3.19.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-expression:4.3.19.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-context-support:4.3.19.RELEASE" />
<element id="library" level="project" name="Maven: com.sun.mail:javax.mail:1.5.6" />
<element id="library" level="project" name="Maven: javax.activation:activation:1.1" />
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-starter-security:1.5.16.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-aop:4.3.19.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework.security:spring-security-config:4.2.8.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework.security:spring-security-web:4.2.8.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework.ldap:spring-ldap-core:2.3.2.RELEASE" />
<element id="library" level="project" name="Maven: org.slf4j:slf4j-api:1.7.25" />
<element id="library" level="project" name="Maven: org.springframework:spring-beans:4.3.19.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-core:4.3.19.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-tx:4.3.19.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework.security:spring-security-ldap:4.2.8.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework.security:spring-security-core:4.2.8.RELEASE" />
<element id="library" level="project" name="Maven: aopalliance:aopalliance:1.0" />
<element id="library" level="project" name="Maven: io.jsonwebtoken:jjwt:0.9.1" />
<element id="library" level="project" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.8.11.2" />
<element id="library" level="project" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.8.0" />
<element id="library" level="project" name="Maven: com.fasterxml.jackson.core:jackson-core:2.8.11" />
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-starter-actuator:1.5.16.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-actuator:1.5.16.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework.mobile:spring-mobile-device:1.1.5.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-webmvc:4.3.19.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-web:4.3.19.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-starter-web:1.5.16.RELEASE" />
<element id="library" level="project" name="Maven: org.hibernate:hibernate-validator:5.3.6.Final" />
<element id="library" level="project" name="Maven: javax.validation:validation-api:1.1.0.Final" />
<element id="library" level="project" name="Maven: com.fasterxml:classmate:1.3.4" />
<element id="library" level="project" name="Maven: org.hibernate:hibernate-jpamodelgen:5.0.12.Final" />
<element id="library" level="project" name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final" />
<element id="library" level="project" name="Maven: com.microsoft.sqlserver:mssql-jdbc:7.0.0.jre8" />
<element id="library" level="project" name="Maven: org.hibernate:hibernate-envers:5.0.12.Final" />
<element id="library" level="project" name="Maven: com.zaxxer:HikariCP:3.1.0" />
</element>
</element>
<element id="directory" name="META-INF">
<element id="file-copy" path="$PROJECT_DIR$/target/miniCRM-0.0.1-SNAPSHOT/META-INF/MANIFEST.MF" />
</element>
<element id="javaee-facet-resources" facet="miniCRM/web/Web" />
</root>
</artifact>
</component>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="miniCRM" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel>
<module name="miniCRM" target="1.8" />
</bytecodeTargetLevel>
</component>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="BAJTicketing@localhost" uuid="00cbb7bb-4f38-439c-a2f4-00d75959c864">
<driver-ref>sqlserver.ms</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbc-driver>
<jdbc-url>jdbc:sqlserver://localhost:1433;database=BAJTicketing</jdbc-url>
<driver-properties>
<property name="applicationName" value="DataGrip" />
</driver-properties>
</data-source>
</component>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<dataSource name="BAJTicketing@localhost">
<database-model serializer="dbm" rdbms="MSSQL" format-version="4.4">
<root id="1">
<ServerType>standalone</ServerType>
</root>
<database id="2" parent="1" name="BAJTicketingOLD">
<ObjectId>10</ObjectId>
<Current>1</Current>
</database>
<database id="3" parent="1" name="master">
<ObjectId>1</ObjectId>
</database>
<database id="4" parent="1" name="tempdb">
<ObjectId>2</ObjectId>
</database>
<database id="5" parent="1" name="model">
<ObjectId>3</ObjectId>
</database>
<database id="6" parent="1" name="msdb">
<ObjectId>4</ObjectId>
</database>
<database id="7" parent="1" name="Ticketing-Amana">
<ObjectId>5</ObjectId>
</database>
<database id="8" parent="1" name="WebDialer">
<ObjectId>6</ObjectId>
</database>
<database id="9" parent="1" name="BasicRESTSolution">
<ObjectId>7</ObjectId>
</database>
<database id="10" parent="1" name="my_wiki">
<ObjectId>8</ObjectId>
</database>
<database id="11" parent="1" name="WebDialer2">
<ObjectId>9</ObjectId>
</database>
<database id="12" parent="1" name="BAJTicketing">
<ObjectId>11</ObjectId>
<Current>1</Current>
<Visible>1</Visible>
</database>
<schema id="13" parent="12" name="dbo">
<ObjectId>1</ObjectId>
<IntrospectionTimestamp>2018-09-11.15:42:53.827</IntrospectionTimestamp>
<Current>1</Current>
<Visible>1</Visible>
</schema>
<schema id="14" parent="12" name="guest">
<ObjectId>2</ObjectId>
</schema>
<schema id="15" parent="12" name="INFORMATION_SCHEMA">
<ObjectId>3</ObjectId>
</schema>
<schema id="16" parent="12" name="sys">
<ObjectId>4</ObjectId>
</schema>
<schema id="17" parent="12" name="db_owner">
<ObjectId>16384</ObjectId>
</schema>
<schema id="18" parent="12" name="db_accessadmin">
<ObjectId>16385</ObjectId>
</schema>
<schema id="19" parent="12" name="db_securityadmin">
<ObjectId>16386</ObjectId>
</schema>
<schema id="20" parent="12" name="db_ddladmin">
<ObjectId>16387</ObjectId>
</schema>
<schema id="21" parent="12" name="db_backupoperator">
<ObjectId>16389</ObjectId>
</schema>
<schema id="22" parent="12" name="db_datareader">
<ObjectId>16390</ObjectId>
</schema>
<schema id="23" parent="12" name="db_datawriter">
<ObjectId>16391</ObjectId>
</schema>
<schema id="24" parent="12" name="db_denydatareader">
<ObjectId>16392</ObjectId>
</schema>
<schema id="25" parent="12" name="db_denydatawriter">
<ObjectId>16393</ObjectId>
</schema>
<table id="26" parent="13" name="assignedtickets">
<ObjectId>565577053</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.150</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.417</ModifiedTimestamp>
</table>
<table id="27" parent="13" name="attachments">
<ObjectId>597577167</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.153</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.417</ModifiedTimestamp>
</table>
<table id="28" parent="13" name="calendar">
<ObjectId>629577281</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.160</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.450</ModifiedTimestamp>
</table>
<table id="29" parent="13" name="countrycode">
<ObjectId>661577395</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.163</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.163</ModifiedTimestamp>
</table>
<table id="30" parent="13" name="emailhistory">
<ObjectId>693577509</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.167</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.637</ModifiedTimestamp>
</table>
<table id="31" parent="13" name="emailmessage">
<ObjectId>725577623</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.170</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.637</ModifiedTimestamp>
</table>
<table id="32" parent="13" name="emailtemplates">
<ObjectId>757577737</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.173</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.450</ModifiedTimestamp>
</table>
<table id="33" parent="13" name="escalationhistory">
<ObjectId>789577851</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.180</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.643</ModifiedTimestamp>
</table>
<table id="34" parent="13" name="globalconfiguration">
<ObjectId>821577965</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.180</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.180</ModifiedTimestamp>
</table>
<table id="35" parent="13" name="grouproles">
<ObjectId>853578079</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.183</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.183</ModifiedTimestamp>
</table>
<table id="36" parent="13" name="groups">
<ObjectId>885578193</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.187</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.450</ModifiedTimestamp>
</table>
<table id="37" parent="13" name="holdreason">
<ObjectId>917578307</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.193</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.467</ModifiedTimestamp>
</table>
<table id="38" parent="13" name="holidays">
<ObjectId>949578421</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.200</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.657</ModifiedTimestamp>
</table>
<table id="39" parent="13" name="logindetails">
<ObjectId>997578592</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.210</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.210</ModifiedTimestamp>
</table>
<table id="40" parent="13" name="maincategory">
<ObjectId>1029578706</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.220</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.663</ModifiedTimestamp>
</table>
<table id="41" parent="13" name="maincatholidays">
<ObjectId>1061578820</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.227</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.660</ModifiedTimestamp>
</table>
<table id="42" parent="13" name="notifications">
<ObjectId>1093578934</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.233</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.467</ModifiedTimestamp>
</table>
<table id="43" parent="13" name="permissions">
<ObjectId>1125579048</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.240</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.240</ModifiedTimestamp>
</table>
<table id="44" parent="13" name="rolepermissions">
<ObjectId>1157579162</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.247</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.247</ModifiedTimestamp>
</table>
<table id="45" parent="13" name="roles">
<ObjectId>1189579276</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.253</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.15:41:56.717</ModifiedTimestamp>
</table>
<table id="46" parent="13" name="sla">
<ObjectId>1221579390</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.263</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.673</ModifiedTimestamp>
</table>
<table id="47" parent="13" name="slausers">
<ObjectId>1253579504</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.270</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.487</ModifiedTimestamp>
</table>
<table id="48" parent="13" name="smsHistory">
<ObjectId>1285579618</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.277</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.663</ModifiedTimestamp>
</table>
<table id="49" parent="13" name="smsTemplate">
<ObjectId>1317579732</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.287</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.493</ModifiedTimestamp>
</table>
<table id="50" parent="13" name="sourceChannel">
<ObjectId>1349579846</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.293</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.500</ModifiedTimestamp>
</table>
<table id="51" parent="13" name="status">
<ObjectId>1381579960</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.300</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.520</ModifiedTimestamp>
</table>
<table id="52" parent="13" name="subcategory">
<ObjectId>1413580074</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.310</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.670</ModifiedTimestamp>
</table>
<table id="53" parent="13" name="subscriptions">
<ObjectId>1445580188</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.317</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.527</ModifiedTimestamp>
</table>
<table id="54" parent="13" name="ticket">
<ObjectId>1477580302</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.340</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.670</ModifiedTimestamp>
</table>
<table id="55" parent="13" name="ticketExtData">
<ObjectId>1573580644</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.357</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.357</ModifiedTimestamp>
</table>
<table id="56" parent="13" name="ticketactions">
<ObjectId>1509580416</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.347</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.573</ModifiedTimestamp>
</table>
<table id="57" parent="13" name="ticketdata">
<ObjectId>1541580530</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.350</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.667</ModifiedTimestamp>
</table>
<table id="58" parent="13" name="ticketlock">
<ObjectId>1605580758</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.360</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.670</ModifiedTimestamp>
</table>
<table id="59" parent="13" name="tickettypes">
<ObjectId>1637580872</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.363</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.363</ModifiedTimestamp>
</table>
<table id="60" parent="13" name="topic">
<ObjectId>1669580986</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.370</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.683</ModifiedTimestamp>
</table>
<table id="61" parent="13" name="topicsla">
<ObjectId>1701581100</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.373</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.677</ModifiedTimestamp>
</table>
<table id="62" parent="13" name="topicspermissions">
<ObjectId>1733581214</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.377</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.680</ModifiedTimestamp>
</table>
<table id="63" parent="13" name="userpreferences">
<ObjectId>1765581328</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.383</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.620</ModifiedTimestamp>
</table>
<table id="64" parent="13" name="userroles">
<ObjectId>1797581442</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.387</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.683</ModifiedTimestamp>
</table>
<table id="65" parent="13" name="users">
<ObjectId>1829581556</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.390</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.650</ModifiedTimestamp>
</table>
<table id="66" parent="13" name="usertopic">
<ObjectId>1861581670</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.397</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.683</ModifiedTimestamp>
</table>
<routine id="67" parent="13" name="GetUserPermissions">
<ObjectId>430624577</ObjectId>
<CreatedTimestamp>2018-09-11.15:31:07.757</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.15:36:39.373</ModifiedTimestamp>
<RoutineKind>procedure</RoutineKind>
<RoutineType>proc</RoutineType>
</routine>
<column id="68" parent="26" name="ID">
<Position>1</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>16</SequenceIdentity>
</column>
<column id="69" parent="26" name="ticketID">
<Position>2</Position>
<DataType>bigint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="70" parent="26" name="userID">
<Position>3</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="71" parent="26" name="Enabled">
<Position>4</Position>
<DataType>int|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="72" parent="26" name="CreationDate">
<Position>5</Position>
<DataType>datetime|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="73" parent="26" name="CreatedBy">
<Position>6</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="74" parent="26" name="ModifiedBy">
<Position>7</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="75" parent="26" name="ModificationDate">
<Position>8</Position>
<DataType>varchar(8000)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<index id="76" parent="26" name="PK_usersassignedtickets_ID">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="77" parent="26" name="PK_usersassignedtickets_ID">
<ObjectId>581577110</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.150</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.150</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_usersassignedtickets_ID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="78" parent="27" name="ID">
<Position>1</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>59</SequenceIdentity>
</column>
<column id="79" parent="27" name="FileName">
<Position>2</Position>
<DataType>nvarchar(500)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="80" parent="27" name="FileType">
<Position>3</Position>
<DataType>nvarchar(500)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="81" parent="27" name="Hash">
<Position>4</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="82" parent="27" name="RAWContent">
<Position>5</Position>
<DataType>varbinary(max)|0</DataType>
</column>
<column id="83" parent="27" name="FilePath">
<Position>6</Position>
<DataType>nvarchar(500)|0</DataType>
</column>
<column id="84" parent="27" name="CreatedBy">
<Position>7</Position>
<DataType>nvarchar(50)|0</DataType>
<NotNull>1</NotNull>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="85" parent="27" name="CreationDate">
<Position>8</Position>
<DataType>datetime|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="86" parent="27" name="ModifiedBy">
<Position>9</Position>
<DataType>nvarchar(50)|0</DataType>
</column>
<column id="87" parent="27" name="ModificationDate">
<Position>10</Position>
<DataType>datetime|0</DataType>
</column>
<index id="88" parent="27" name="PK_attachments_ID">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="89" parent="27" name="PK_attachments_ID">
<ObjectId>613577224</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.157</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.157</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_attachments_ID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="90" parent="28" name="dt">
<Position>1</Position>
<DataType>datetime|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="91" parent="28" name="isWeekday">
<Position>2</Position>
<DataType>smallint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="92" parent="28" name="isHoliday">
<Position>3</Position>
<DataType>smallint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="93" parent="28" name="Y">
<Position>4</Position>
<DataType>smallint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="94" parent="28" name="FY">
<Position>5</Position>
<DataType>smallint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="95" parent="28" name="Q">
<Position>6</Position>
<DataType>tinyint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="96" parent="28" name="M">
<Position>7</Position>
<DataType>tinyint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="97" parent="28" name="D">
<Position>8</Position>
<DataType>tinyint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="98" parent="28" name="DW">
<Position>9</Position>
<DataType>tinyint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="99" parent="28" name="monthname">
<Position>10</Position>
<DataType>nvarchar(9)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="100" parent="28" name="dayname">
<Position>11</Position>
<DataType>nvarchar(9)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="101" parent="28" name="W">
<Position>12</Position>
<DataType>tinyint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="102" parent="28" name="Description">
<Position>13</Position>
<DataType>nvarchar(150)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<index id="103" parent="28" name="PK_calendar_dt">
<Position>1</Position>
<ColNames>dt</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="104" parent="28" name="PK_calendar_dt">
<ObjectId>645577338</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.160</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.160</ModifiedTimestamp>
<ColNames>dt</ColNames>
<UnderlyingIndexName>PK_calendar_dt</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="105" parent="29" name="ID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="106" parent="29" name="CountryName">
<Position>2</Position>
<DataType>nvarchar(255)|0</DataType>
</column>
<column id="107" parent="29" name="ISO2">
<Position>3</Position>
<DataType>nvarchar(255)|0</DataType>
</column>
<column id="108" parent="29" name="ISO3">
<Position>4</Position>
<DataType>nvarchar(255)|0</DataType>
</column>
<column id="109" parent="29" name="TopLevelDomain">
<Position>5</Position>
<DataType>nvarchar(255)|0</DataType>
</column>
<column id="110" parent="29" name="FIPS">
<Position>6</Position>
<DataType>nvarchar(255)|0</DataType>
</column>
<column id="111" parent="29" name="ISONumeric">
<Position>7</Position>
<DataType>float|0</DataType>
</column>
<column id="112" parent="29" name="GeoNameID">
<Position>8</Position>
<DataType>float|0</DataType>
</column>
<column id="113" parent="29" name="E164">
<Position>9</Position>
<DataType>float|0</DataType>
</column>
<column id="114" parent="29" name="PhoneCode">
<Position>10</Position>
<DataType>nvarchar(255)|0</DataType>
</column>
<column id="115" parent="29" name="Continent">
<Position>11</Position>
<DataType>nvarchar(255)|0</DataType>
</column>
<column id="116" parent="29" name="Capital">
<Position>12</Position>
<DataType>nvarchar(255)|0</DataType>
</column>
<column id="117" parent="29" name="TimeZoneinCapital">
<Position>13</Position>
<DataType>nvarchar(255)|0</DataType>
</column>
<column id="118" parent="29" name="Currency">
<Position>14</Position>
<DataType>nvarchar(255)|0</DataType>
</column>
<column id="119" parent="29" name="LanguageCodes">
<Position>15</Position>
<DataType>nvarchar(255)|0</DataType>
</column>
<column id="120" parent="29" name="Languages">
<Position>16</Position>
<DataType>nvarchar(255)|0</DataType>
</column>
<column id="121" parent="29" name="AreaKM2">
<Position>17</Position>
<DataType>float|0</DataType>
</column>
<column id="122" parent="29" name="InternetHosts">
<Position>18</Position>
<DataType>float|0</DataType>
</column>
<column id="123" parent="29" name="InternetUsers">
<Position>19</Position>
<DataType>float|0</DataType>
</column>
<column id="124" parent="29" name="Mobile">
<Position>20</Position>
<DataType>float|0</DataType>
</column>
<column id="125" parent="29" name="Landline">
<Position>21</Position>
<DataType>float|0</DataType>
</column>
<column id="126" parent="29" name="GDP">
<Position>22</Position>
<DataType>float|0</DataType>
</column>
<column id="127" parent="29" name="MobileLength">
<Position>23</Position>
<DataType>int|0</DataType>
</column>
<column id="128" parent="29" name="Enabled">
<Position>24</Position>
<DataType>tinyint|0</DataType>
</column>
<index id="129" parent="29" name="PK_countrycode">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="130" parent="29" name="PK_countrycode">
<ObjectId>677577452</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.163</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.163</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_countrycode</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="131" parent="30" name="ID">
<Position>1</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>702</SequenceIdentity>
</column>
<column id="132" parent="30" name="TicketID">
<Position>2</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="133" parent="30" name="EmailID">
<Position>3</Position>
<DataType>nvarchar(250)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="134" parent="30" name="CopyTo">
<Position>4</Position>
<DataType>nvarchar(max)|0</DataType>
</column>
<column id="135" parent="30" name="BCopyTo">
<Position>5</Position>
<DataType>nvarchar(max)|0</DataType>
</column>
<column id="136" parent="30" name="CreationDate">
<Position>6</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="137" parent="30" name="SendDate">
<Position>7</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="138" parent="30" name="SendingOn">
<Position>8</Position>
<DataType>nvarchar(120)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="139" parent="30" name="Status">
<Position>9</Position>
<DataType>int|0</DataType>
</column>
<column id="140" parent="30" name="Type">
<Position>10</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="141" parent="30" name="Result">
<Position>11</Position>
<DataType>nvarchar(max)|0</DataType>
</column>
<column id="142" parent="30" name="EmailMessage">
<Position>12</Position>
<DataType>bigint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="143" parent="30" name="ReadStatus">
<Position>13</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="144" parent="30" name="DeleteStatus">
<Position>14</Position>
<DataType>tinyint|0</DataType>
</column>
<index id="145" parent="30" name="PK_emailhistory_ID">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="146" parent="30" name="PK_emailhistory_ID">
<ObjectId>709577566</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.170</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.170</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_emailhistory_ID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<foreign-key id="147" parent="30" name="FK_EmailHistory_EmailMessage">
<ObjectId>2066106401</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.637</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.637</ModifiedTimestamp>
<ColNames>EmailMessage</ColNames>
<RefTableId>725577623</RefTableId>
<RefSchemaName>dbo</RefSchemaName>
<RefTableName>emailmessage</RefTableName>
<RefKeyName>PK_emailmessage_Id</RefKeyName>
<RefColNames>Id</RefColNames>
</foreign-key>
<column id="148" parent="31" name="Id">
<Position>1</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>116</SequenceIdentity>
</column>
<column id="149" parent="31" name="EmailTitle">
<Position>2</Position>
<DataType>nvarchar(500)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="150" parent="31" name="EmailMessage">
<Position>3</Position>
<DataType>nvarchar(max)|0</DataType>
<NotNull>1</NotNull>
</column>
<index id="151" parent="31" name="PK_emailmessage_Id">
<Position>1</Position>
<ColNames>Id</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="152" parent="31" name="PK_emailmessage_Id">
<ObjectId>741577680</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.170</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.170</ModifiedTimestamp>
<ColNames>Id</ColNames>
<UnderlyingIndexName>PK_emailmessage_Id</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="153" parent="32" name="TemplateID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>39</SequenceIdentity>
</column>
<column id="154" parent="32" name="TemplateName">
<Position>2</Position>
<DataType>nvarchar(150)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="155" parent="32" name="TemplateData">
<Position>3</Position>
<DataType>nvarchar(max)|0</DataType>
</column>
<column id="156" parent="32" name="enabled">
<Position>4</Position>
<DataType>smallint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="157" parent="32" name="CreatedBy">
<Position>5</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="158" parent="32" name="CreationDate">
<Position>6</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="159" parent="32" name="ModificationDate">
<Position>7</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="160" parent="32" name="ModifiedBy">
<Position>8</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<index id="161" parent="32" name="PK_emailtemplates_TemplateID">
<Position>1</Position>
<ColNames>TemplateID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="162" parent="32" name="PK_emailtemplates_TemplateID">
<ObjectId>773577794</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.177</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.177</ModifiedTimestamp>
<ColNames>TemplateID</ColNames>
<UnderlyingIndexName>PK_emailtemplates_TemplateID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="163" parent="33" name="ID">
<Position>1</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>236</SequenceIdentity>
</column>
<column id="164" parent="33" name="TicketID">
<Position>2</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="165" parent="33" name="SLA">
<Position>3</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="166" parent="33" name="ESCLevel">
<Position>4</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="167" parent="33" name="ESCDateTime">
<Position>5</Position>
<DataType>datetime|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="168" parent="33" name="EscUsers">
<Position>6</Position>
<DataType>nvarchar(max)|0</DataType>
</column>
<column id="169" parent="33" name="EscEmails">
<Position>7</Position>
<DataType>nvarchar(max)|0</DataType>
</column>
<index id="170" parent="33" name="PK_escalationhistory_ID">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="171" parent="33" name="PK_escalationhistory_ID">
<ObjectId>805577908</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.180</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.180</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_escalationhistory_ID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<foreign-key id="172" parent="33" name="FK_EscalationHistory_Ticket">
<ObjectId>2082106458</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.640</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.640</ModifiedTimestamp>
<ColNames>TicketID</ColNames>
<RefTableId>1477580302</RefTableId>
<RefSchemaName>dbo</RefSchemaName>
<RefTableName>ticket</RefTableName>
<RefKeyName>PK_ticket_ID</RefKeyName>
<RefColNames>ID</RefColNames>
</foreign-key>
<foreign-key id="173" parent="33" name="FK_EsclationHistory_SLA">
<ObjectId>2098106515</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.640</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.640</ModifiedTimestamp>
<ColNames>SLA</ColNames>
<RefTableId>1221579390</RefTableId>
<RefSchemaName>dbo</RefSchemaName>
<RefTableName>sla</RefTableName>
<RefKeyName>PK_sla_ID</RefKeyName>
<RefColNames>ID</RefColNames>
</foreign-key>
<column id="174" parent="34" name="Property">
<Position>1</Position>
<DataType>nvarchar(50)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="175" parent="34" name="Value">
<Position>2</Position>
<DataType>ntext|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="176" parent="34" name="type">
<Position>3</Position>
<DataType>nvarchar(50)|0</DataType>
</column>
<index id="177" parent="34" name="PK_globalconfiguration_Property">
<Position>1</Position>
<ColNames>Property</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="178" parent="34" name="PK_globalconfiguration_Property">
<ObjectId>837578022</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.183</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.183</ModifiedTimestamp>
<ColNames>Property</ColNames>
<UnderlyingIndexName>PK_globalconfiguration_Property</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="179" parent="35" name="ID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>1</SequenceIdentity>
</column>
<column id="180" parent="35" name="groupID">
<Position>2</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="181" parent="35" name="roleID">
<Position>3</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="182" parent="35" name="CreationDate">
<Position>4</Position>
<DataType>datetime|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="183" parent="35" name="CreatedBy">
<Position>5</Position>
<DataType>nvarchar(50)|0</DataType>
<NotNull>1</NotNull>
</column>
<index id="184" parent="35" name="PK_groupspermissions">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="185" parent="35" name="PK_groupspermissions">
<ObjectId>869578136</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.187</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.187</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_groupspermissions</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="186" parent="36" name="ID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>1</SequenceIdentity>
</column>
<column id="187" parent="36" name="GroupName">
<Position>2</Position>
<DataType>nvarchar(50)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="188" parent="36" name="CreationDate">
<Position>3</Position>
<DataType>datetime|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="189" parent="36" name="ModificationDate">
<Position>4</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="190" parent="36" name="CreatedBy">
<Position>5</Position>
<DataType>nvarchar(50)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="191" parent="36" name="ModifiedBy">
<Position>6</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="192" parent="36" name="Enabled">
<Position>7</Position>
<DataType>tinyint|0</DataType>
<NotNull>1</NotNull>
<DefaultExpression>1</DefaultExpression>
</column>
<index id="193" parent="36" name="PK_group_GroupNAME">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="194" parent="36" name="PK_group_GroupNAME">
<ObjectId>901578250</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.190</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.190</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_group_GroupNAME</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="195" parent="37" name="ReasonID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>3</SequenceIdentity>
</column>
<column id="196" parent="37" name="SortOrder">
<Position>2</Position>
<DataType>int|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="197" parent="37" name="ArabicLabel">
<Position>3</Position>
<DataType>nvarchar(150)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="198" parent="37" name="EnglishLabel">
<Position>4</Position>
<DataType>nvarchar(150)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="199" parent="37" name="CreationDate">
<Position>5</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="200" parent="37" name="ModificationDate">
<Position>6</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="201" parent="37" name="CreatedBy">
<Position>7</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="202" parent="37" name="ModifiedBy">
<Position>8</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="203" parent="37" name="HoldTime">
<Position>9</Position>
<DataType>int|0</DataType>
</column>
<column id="204" parent="37" name="Flexible">
<Position>10</Position>
<DataType>tinyint|0</DataType>
</column>
<index id="205" parent="37" name="PK_ticketholdreason_ReasonID">
<Position>1</Position>
<ColNames>ReasonID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="206" parent="37" name="PK_ticketholdreason_ReasonID">
<ObjectId>933578364</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.197</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.197</ModifiedTimestamp>
<ColNames>ReasonID</ColNames>
<UnderlyingIndexName>PK_ticketholdreason_ReasonID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="207" parent="38" name="HolidayID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>1</SequenceIdentity>
</column>
<column id="208" parent="38" name="HolidayName">
<Position>2</Position>
<DataType>nvarchar(250)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="209" parent="38" name="StartDate">
<Position>3</Position>
<DataType>date|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="210" parent="38" name="EndData">
<Position>4</Position>
<DataType>date|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="211" parent="38" name="Enabled">
<Position>5</Position>
<DataType>smallint|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="212" parent="38" name="CreatedBy">
<Position>6</Position>
<DataType>nvarchar(50)|0</DataType>
<NotNull>1</NotNull>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="213" parent="38" name="CreationDate">
<Position>7</Position>
<DataType>datetime|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="214" parent="38" name="ModifiedBy">
<Position>8</Position>
<DataType>nvarchar(50)|0</DataType>
</column>
<column id="215" parent="38" name="ModificationDate">
<Position>9</Position>
<DataType>datetime|0</DataType>
</column>
<index id="216" parent="38" name="PK_holidays_HolidayID">
<Position>1</Position>
<ColNames>HolidayID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<index id="217" parent="38" name="holidays$IX_Holidays">
<Position>2</Position>
<ColNames>Enabled
StartDate
EndData</ColNames>
<Unique>1</Unique>
</index>
<key id="218" parent="38" name="PK_holidays_HolidayID">
<ObjectId>965578478</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.203</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.203</ModifiedTimestamp>
<ColNames>HolidayID</ColNames>
<UnderlyingIndexName>PK_holidays_HolidayID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<key id="219" parent="38" name="holidays$IX_Holidays">
<ObjectId>981578535</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.203</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.203</ModifiedTimestamp>
<ColNames>Enabled
StartDate
EndData</ColNames>
<UnderlyingIndexName>holidays$IX_Holidays</UnderlyingIndexName>
</key>
<column id="220" parent="39" name="ID">
<Position>1</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>1778</SequenceIdentity>
</column>
<column id="221" parent="39" name="UserID">
<Position>2</Position>
<DataType>nvarchar(50)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="222" parent="39" name="DateTime">
<Position>3</Position>
<DataType>datetime|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="223" parent="39" name="Result">
<Position>4</Position>
<DataType>smallint|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="224" parent="39" name="IPAddress">
<Position>5</Position>
<DataType>varchar(20)|0</DataType>
</column>
<column id="225" parent="39" name="LogoutDateTime">
<Position>6</Position>
<DataType>datetime|0</DataType>
</column>
<column id="226" parent="39" name="Token">
<Position>7</Position>
<DataType>varchar(500)|0</DataType>
</column>
<column id="227" parent="39" name="LogoutReason">
<Position>8</Position>
<DataType>varchar(100)|0</DataType>
</column>
<index id="228" parent="39" name="PK_logindetails_ID">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="229" parent="39" name="PK_logindetails_ID">
<ObjectId>1013578649</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.213</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.213</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_logindetails_ID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="230" parent="40" name="ID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>26</SequenceIdentity>
</column>
<column id="231" parent="40" name="ArabicLabel">
<Position>2</Position>
<DataType>nvarchar(150)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="232" parent="40" name="EnglishLabel">
<Position>3</Position>
<DataType>nvarchar(150)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="233" parent="40" name="CreatedBy">
<Position>4</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="234" parent="40" name="ModifiedBy">
<Position>5</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="235" parent="40" name="CreationDate">
<Position>6</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="236" parent="40" name="ModificationDate">
<Position>7</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="237" parent="40" name="Enabled">
<Position>8</Position>
<DataType>tinyint|0</DataType>
</column>
<index id="238" parent="40" name="PK_maincategory_ID">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="239" parent="40" name="PK_maincategory_ID">
<ObjectId>1045578763</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.220</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.220</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_maincategory_ID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="240" parent="41" name="Id">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>1</SequenceIdentity>
</column>
<column id="241" parent="41" name="MainCategory">
<Position>2</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="242" parent="41" name="HolidayID">
<Position>3</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<index id="243" parent="41" name="PK_maincatholidays_Id">
<Position>1</Position>
<ColNames>Id</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="244" parent="41" name="PK_maincatholidays_Id">
<ObjectId>1077578877</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.227</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.227</ModifiedTimestamp>
<ColNames>Id</ColNames>
<UnderlyingIndexName>PK_maincatholidays_Id</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<foreign-key id="245" parent="41" name="FK_MainCatHolidays_MainCategory">
<ObjectId>2130106629</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.660</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.660</ModifiedTimestamp>
<ColNames>MainCategory</ColNames>
<RefTableId>1029578706</RefTableId>
<RefSchemaName>dbo</RefSchemaName>
<RefTableName>maincategory</RefTableName>
<RefKeyName>PK_maincategory_ID</RefKeyName>
<RefColNames>ID</RefColNames>
</foreign-key>
<foreign-key id="246" parent="41" name="FK_MainCatHolidays_Holidays">
<ObjectId>2114106572</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.657</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.657</ModifiedTimestamp>
<ColNames>HolidayID</ColNames>
<RefTableId>949578421</RefTableId>
<RefSchemaName>dbo</RefSchemaName>
<RefTableName>holidays</RefTableName>
<RefKeyName>PK_holidays_HolidayID</RefKeyName>
<RefColNames>HolidayID</RefColNames>
</foreign-key>
<column id="247" parent="42" name="ID">
<Position>1</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>1</SequenceIdentity>
</column>
<column id="248" parent="42" name="TicketID">
<Position>2</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="249" parent="42" name="DataID">
<Position>3</Position>
<DataType>bigint|0</DataType>
</column>
<column id="250" parent="42" name="Action">
<Position>4</Position>
<DataType>int|0</DataType>
</column>
<column id="251" parent="42" name="CreationDate">
<Position>5</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="252" parent="42" name="CreatedBy">
<Position>6</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="253" parent="42" name="Status">
<Position>7</Position>
<DataType>tinyint|0</DataType>
</column>
<index id="254" parent="42" name="PK_NotificationMessages">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="255" parent="42" name="PK_NotificationMessages">
<ObjectId>1109578991</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.233</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.233</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_NotificationMessages</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="256" parent="43" name="ID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>1</SequenceIdentity>
</column>
<column id="257" parent="43" name="Permission">
<Position>2</Position>
<DataType>varchar(50)|0</DataType>
</column>
<column id="258" parent="43" name="ModuleName">
<Position>3</Position>
<DataType>varchar(50)|0</DataType>
</column>
<column id="259" parent="43" name="GroupName">
<Position>4</Position>
<DataType>varchar(50)|0</DataType>
</column>
<index id="260" parent="43" name="PK_Permissions">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="261" parent="43" name="PK_Permissions">
<ObjectId>1141579105</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.240</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.240</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_Permissions</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="262" parent="44" name="ID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>1</SequenceIdentity>
</column>
<column id="263" parent="44" name="roleID">
<Position>2</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="264" parent="44" name="permissionID">
<Position>3</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="265" parent="44" name="CreationDate">
<Position>4</Position>
<DataType>datetime|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="266" parent="44" name="CreatedBy">
<Position>5</Position>
<DataType>nvarchar(50)|0</DataType>
<NotNull>1</NotNull>
</column>
<index id="267" parent="44" name="PK_rolepermissions">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="268" parent="44" name="PK_rolepermissions">
<ObjectId>1173579219</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.250</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.250</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_rolepermissions</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="269" parent="45" name="ID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>1</SequenceIdentity>
</column>
<column id="270" parent="45" name="Role">
<Position>2</Position>
<DataType>varchar(50)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="271" parent="45" name="CreatedBy">
<Position>3</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="272" parent="45" name="ModifiedBy">
<Position>4</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="273" parent="45" name="CreationDate">
<Position>5</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="274" parent="45" name="ModificationDate">
<Position>6</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<index id="275" parent="45" name="PK_roles">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="276" parent="45" name="PK_roles">
<ObjectId>1205579333</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.257</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.257</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_roles</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="277" parent="46" name="ID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>5000</SequenceIdentity>
</column>
<column id="278" parent="46" name="Time">
<Position>2</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="279" parent="46" name="CreationDate">
<Position>3</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="280" parent="46" name="CreatedBy">
<Position>4</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="281" parent="46" name="ModifiedBy">
<Position>5</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="282" parent="46" name="ModificationDate">
<Position>6</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="283" parent="46" name="SLAName">
<Position>7</Position>
<DataType>nvarchar(50)|0</DataType>
</column>
<column id="284" parent="46" name="CatID">
<Position>8</Position>
<DataType>int|0</DataType>
</column>
<index id="285" parent="46" name="PK_sla_ID">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="286" parent="46" name="PK_sla_ID">
<ObjectId>1237579447</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.263</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.263</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_sla_ID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="287" parent="47" name="id">
<Position>1</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>72</SequenceIdentity>
</column>
<column id="288" parent="47" name="UserId">
<Position>2</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="289" parent="47" name="Sla">
<Position>3</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="290" parent="47" name="CreatedBy">
<Position>4</Position>
<DataType>nvarchar(45)|0</DataType>
<NotNull>1</NotNull>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="291" parent="47" name="CreationDate">
<Position>5</Position>
<DataType>datetime|0</DataType>
<NotNull>1</NotNull>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="292" parent="47" name="ModifiedBy">
<Position>6</Position>
<DataType>nvarchar(45)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="293" parent="47" name="ModificationDate">
<Position>7</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="294" parent="47" name="Enabled">
<Position>8</Position>
<DataType>tinyint|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="295" parent="47" name="Emails">
<Position>9</Position>
<DataType>nvarchar(max)|0</DataType>
</column>
<column id="296" parent="47" name="MobileNumbers">
<Position>10</Position>
<DataType>nvarchar(max)|0</DataType>
</column>
<index id="297" parent="47" name="PK_userssla_id">
<Position>1</Position>
<ColNames>id</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="298" parent="47" name="PK_userssla_id">
<ObjectId>1269579561</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.270</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.270</ModifiedTimestamp>
<ColNames>id</ColNames>
<UnderlyingIndexName>PK_userssla_id</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="299" parent="48" name="ID">
<Position>1</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>11</SequenceIdentity>
</column>
<column id="300" parent="48" name="TicketID">
<Position>2</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="301" parent="48" name="Mobile">
<Position>3</Position>
<DataType>nvarchar(20)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="302" parent="48" name="CreationDate">
<Position>4</Position>
<DataType>datetime|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="303" parent="48" name="Message">
<Position>5</Position>
<DataType>nvarchar(max)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="304" parent="48" name="TemplateID">
<Position>6</Position>
<DataType>int|0</DataType>
</column>
<column id="305" parent="48" name="Status">
<Position>7</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="306" parent="48" name="SendDate">
<Position>8</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="307" parent="48" name="SendingON">
<Position>9</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="308" parent="48" name="ErrorCode">
<Position>10</Position>
<DataType>nvarchar(max)|0</DataType>
</column>
<column id="309" parent="48" name="BackEndID">
<Position>11</Position>
<DataType>nvarchar(50)|0</DataType>
</column>
<index id="310" parent="48" name="PK_smshistory_ID">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="311" parent="48" name="PK_smshistory_ID">
<ObjectId>1301579675</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.280</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.280</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_smshistory_ID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<foreign-key id="312" parent="48" name="FK_SMSHistory_Ticket">
<ObjectId>2146106686</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.663</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.663</ModifiedTimestamp>
<ColNames>TicketID</ColNames>
<RefTableId>1477580302</RefTableId>
<RefSchemaName>dbo</RefSchemaName>
<RefTableName>ticket</RefTableName>
<RefKeyName>PK_ticket_ID</RefKeyName>
<RefColNames>ID</RefColNames>
</foreign-key>
<column id="313" parent="49" name="ID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>44</SequenceIdentity>
</column>
<column id="314" parent="49" name="Enabled">
<Position>2</Position>
<DataType>tinyint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="315" parent="49" name="TemplateName">
<Position>3</Position>
<DataType>nvarchar(50)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="316" parent="49" name="CreationDate">
<Position>4</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="317" parent="49" name="CreatedBy">
<Position>5</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="318" parent="49" name="ModificationDate">
<Position>6</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="319" parent="49" name="ModifiedBy">
<Position>7</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="320" parent="49" name="TemplateText">
<Position>8</Position>
<DataType>nvarchar(700)|0</DataType>
</column>
<index id="321" parent="49" name="PK_smstemplate_TemplateID">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="322" parent="49" name="PK_smstemplate_TemplateID">
<ObjectId>1333579789</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.287</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.287</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_smstemplate_TemplateID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="323" parent="50" name="ChannelID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>3</SequenceIdentity>
</column>
<column id="324" parent="50" name="ArabicLabel">
<Position>2</Position>
<DataType>nvarchar(150)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="325" parent="50" name="EnglishLabel">
<Position>3</Position>
<DataType>nvarchar(150)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="326" parent="50" name="CreatedBy">
<Position>4</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="327" parent="50" name="ModifiedBy">
<Position>5</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="328" parent="50" name="CreationDate">
<Position>6</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="329" parent="50" name="ModificationDate">
<Position>7</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="330" parent="50" name="Enabled">
<Position>8</Position>
<DataType>tinyint|0</DataType>
</column>
<index id="331" parent="50" name="PK_sourcechannel_ChannelID">
<Position>1</Position>
<ColNames>ChannelID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="332" parent="50" name="PK_sourcechannel_ChannelID">
<ObjectId>1365579903</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.293</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.293</ModifiedTimestamp>
<ColNames>ChannelID</ColNames>
<UnderlyingIndexName>PK_sourcechannel_ChannelID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="333" parent="51" name="ID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="334" parent="51" name="ListOrder">
<Position>2</Position>
<DataType>int|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="335" parent="51" name="Enabled">
<Position>3</Position>
<DataType>tinyint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="336" parent="51" name="EnableSLA">
<Position>4</Position>
<DataType>tinyint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="337" parent="51" name="DisplayOnTicketEdit">
<Position>5</Position>
<DataType>tinyint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="338" parent="51" name="ArabicLabel">
<Position>6</Position>
<DataType>nvarchar(150)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="339" parent="51" name="EnglishLabel">
<Position>7</Position>
<DataType>nvarchar(150)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="340" parent="51" name="CreatedBy">
<Position>8</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="341" parent="51" name="ModifiedBy">
<Position>9</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="342" parent="51" name="CreationDate">
<Position>10</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="343" parent="51" name="ModificationDate">
<Position>11</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<index id="344" parent="51" name="PK_status_ID">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="345" parent="51" name="PK_status_ID">
<ObjectId>1397580017</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.303</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.303</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_status_ID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="346" parent="52" name="ID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>45</SequenceIdentity>
</column>
<column id="347" parent="52" name="MainCategory">
<Position>2</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="348" parent="52" name="ArabicLabel">
<Position>3</Position>
<DataType>nvarchar(150)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="349" parent="52" name="EnglishLabel">
<Position>4</Position>
<DataType>nvarchar(150)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="350" parent="52" name="CreatedBy">
<Position>5</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="351" parent="52" name="ModifiedBy">
<Position>6</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="352" parent="52" name="CreationDate">
<Position>7</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="353" parent="52" name="ModificationDate">
<Position>8</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="354" parent="52" name="Enabled">
<Position>9</Position>
<DataType>tinyint|0</DataType>
</column>
<index id="355" parent="52" name="PK_subcategory_ID">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="356" parent="52" name="PK_subcategory_ID">
<ObjectId>1429580131</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.310</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.310</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_subcategory_ID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<foreign-key id="357" parent="52" name="FK_SubCategory_MainCategory">
<ObjectId>14623095</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.663</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.663</ModifiedTimestamp>
<ColNames>MainCategory</ColNames>
<RefTableId>1029578706</RefTableId>
<RefSchemaName>dbo</RefSchemaName>
<RefTableName>maincategory</RefTableName>
<RefKeyName>PK_maincategory_ID</RefKeyName>
<RefColNames>ID</RefColNames>
</foreign-key>
<column id="358" parent="53" name="ID">
<Position>1</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>1</SequenceIdentity>
</column>
<column id="359" parent="53" name="Topic">
<Position>2</Position>
<DataType>int|0</DataType>
</column>
<column id="360" parent="53" name="SubCategory">
<Position>3</Position>
<DataType>int|0</DataType>
</column>
<column id="361" parent="53" name="MainCat">
<Position>4</Position>
<DataType>int|0</DataType>
</column>
<column id="362" parent="53" name="TicketID">
<Position>5</Position>
<DataType>bigint|0</DataType>
</column>
<column id="363" parent="53" name="CreationDate">
<Position>6</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="364" parent="53" name="ModificationDate">
<Position>7</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="365" parent="53" name="CreatedBy">
<Position>8</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="366" parent="53" name="ModifiedBy">
<Position>9</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="367" parent="53" name="userID">
<Position>10</Position>
<DataType>nvarchar(50)|0</DataType>
</column>
<column id="368" parent="53" name="subStatus">
<Position>11</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="369" parent="53" name="OnCreate">
<Position>12</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="370" parent="53" name="OnUpdate">
<Position>13</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="371" parent="53" name="OnClose">
<Position>14</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="372" parent="53" name="EmailID">
<Position>15</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<index id="373" parent="53" name="PK_Subscriptions">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="374" parent="53" name="PK_Subscriptions">
<ObjectId>1461580245</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.320</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.320</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_Subscriptions</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="375" parent="54" name="ID">
<Position>1</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="376" parent="54" name="Topic">
<Position>2</Position>
<DataType>int|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="377" parent="54" name="OriginalTopic">
<Position>3</Position>
<DataType>int|0</DataType>
</column>
<column id="378" parent="54" name="CurrentStatus">
<Position>4</Position>
<DataType>int|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="379" parent="54" name="CreatedBy">
<Position>5</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="380" parent="54" name="ModifiedBy">
<Position>6</Position>
<DataType>nvarchar(50)|0</DataType>
<NotNull>1</NotNull>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="381" parent="54" name="CreationDate">
<Position>7</Position>
<DataType>datetime|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="382" parent="54" name="ModificationDate">
<Position>8</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="383" parent="54" name="CrossedMainSLA">
<Position>9</Position>
<DataType>smallint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="384" parent="54" name="CustomerAccount">
<Position>10</Position>
<DataType>bigint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="385" parent="54" name="SourceChannel">
<Position>11</Position>
<DataType>int|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="386" parent="54" name="Subject">
<Position>12</Position>
<DataType>nvarchar(300)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="387" parent="54" name="TicketType">
<Position>13</Position>
<DataType>int|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="388" parent="54" name="Details">
<Position>14</Position>
<DataType>nvarchar(max)|0</DataType>
</column>
<column id="389" parent="54" name="AssignedTo">
<Position>15</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="390" parent="54" name="EscalationCalDate">
<Position>16</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="391" parent="54" name="LastSLA">
<Position>17</Position>
<DataType>int|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="392" parent="54" name="Language">
<Position>18</Position>
<DataType>int|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="393" parent="54" name="Priority">
<Position>19</Position>
<DataType>int|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="394" parent="54" name="LastTicketData">
<Position>20</Position>
<DataType>bigint|0</DataType>
</column>
<column id="395" parent="54" name="Solved">
<Position>21</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="396" parent="54" name="Closed">
<Position>22</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="397" parent="54" name="Deleted">
<Position>23</Position>
<DataType>tinyint|0</DataType>
</column>
<index id="398" parent="54" name="PK_ticket_ID">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="399" parent="54" name="PK_ticket_ID">
<ObjectId>1493580359</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.343</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.343</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_ticket_ID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="400" parent="55" name="ID">
<Position>1</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>1</SequenceIdentity>
</column>
<column id="401" parent="55" name="TicketID">
<Position>2</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="402" parent="55" name="CreationDate">
<Position>3</Position>
<DataType>datetime|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="403" parent="55" name="ExtField1">
<Position>4</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<column id="404" parent="55" name="ExtField2">
<Position>5</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<column id="405" parent="55" name="ExtField3">
<Position>6</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<column id="406" parent="55" name="ExtField4">
<Position>7</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<column id="407" parent="55" name="ExtField5">
<Position>8</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<column id="408" parent="55" name="ExtField6">
<Position>9</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<column id="409" parent="55" name="ExtField7">
<Position>10</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<column id="410" parent="55" name="ExtField8">
<Position>11</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<column id="411" parent="55" name="ExtField9">
<Position>12</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<column id="412" parent="55" name="ExtField10">
<Position>13</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<column id="413" parent="55" name="ExtField11">
<Position>14</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<column id="414" parent="55" name="ExtField12">
<Position>15</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<column id="415" parent="55" name="ExtField13">
<Position>16</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<column id="416" parent="55" name="ExtField14">
<Position>17</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<column id="417" parent="55" name="ExtField15">
<Position>18</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<column id="418" parent="55" name="ExtField16">
<Position>19</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<column id="419" parent="55" name="ExtField17">
<Position>20</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<column id="420" parent="55" name="ExtField18">
<Position>21</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<column id="421" parent="55" name="ExtField19">
<Position>22</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<column id="422" parent="55" name="ExtField20">
<Position>23</Position>
<DataType>nvarchar(250)|0</DataType>
</column>
<index id="423" parent="55" name="PK_ticketExtData">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="424" parent="55" name="PK_ticketExtData">
<ObjectId>1589580701</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.357</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.357</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_ticketExtData</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="425" parent="56" name="ActionID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>12</SequenceIdentity>
</column>
<column id="426" parent="56" name="ArabicLabel">
<Position>2</Position>
<DataType>nvarchar(150)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="427" parent="56" name="EnglishLabel">
<Position>3</Position>
<DataType>nvarchar(150)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="428" parent="56" name="Enabled">
<Position>4</Position>
<DataType>tinyint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="429" parent="56" name="CreatedBy">
<Position>5</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="430" parent="56" name="ModifiedBy">
<Position>6</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="431" parent="56" name="CreationDate">
<Position>7</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="432" parent="56" name="ModificationDate">
<Position>8</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="433" parent="56" name="SetStatusTo">
<Position>9</Position>
<DataType>int|0</DataType>
</column>
<index id="434" parent="56" name="PK_ticketactions_ActionID">
<Position>1</Position>
<ColNames>ActionID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="435" parent="56" name="PK_ticketactions_ActionID">
<ObjectId>1525580473</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.347</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.347</ModifiedTimestamp>
<ColNames>ActionID</ColNames>
<UnderlyingIndexName>PK_ticketactions_ActionID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="436" parent="57" name="ID">
<Position>1</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>58</SequenceIdentity>
</column>
<column id="437" parent="57" name="TicketID">
<Position>2</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="438" parent="57" name="ActionID">
<Position>3</Position>
<DataType>int|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="439" parent="57" name="Title">
<Position>4</Position>
<DataType>nvarchar(400)|0</DataType>
</column>
<column id="440" parent="57" name="TicketData">
<Position>5</Position>
<DataType>nvarchar(max)|0</DataType>
</column>
<column id="441" parent="57" name="CreatedBy">
<Position>6</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="442" parent="57" name="CreationDate">
<Position>7</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="443" parent="57" name="ModifiedBy">
<Position>8</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="444" parent="57" name="ModificationDate">
<Position>9</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="445" parent="57" name="Notes">
<Position>10</Position>
<DataType>nvarchar(max)|0</DataType>
</column>
<column id="446" parent="57" name="Hidden">
<Position>11</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="447" parent="57" name="OldStatus">
<Position>12</Position>
<DataType>int|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="448" parent="57" name="NewStatus">
<Position>13</Position>
<DataType>int|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="449" parent="57" name="OldTopic">
<Position>14</Position>
<DataType>int|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="450" parent="57" name="NewTopic">
<Position>15</Position>
<DataType>int|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="451" parent="57" name="NotificationID">
<Position>16</Position>
<DataType>bigint|0</DataType>
</column>
<column id="452" parent="57" name="Notify">
<Position>17</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="453" parent="57" name="NotfiyStatus">
<Position>18</Position>
<DataType>int|0</DataType>
</column>
<index id="454" parent="57" name="PK_ticketdata_ID">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="455" parent="57" name="PK_ticketdata_ID">
<ObjectId>1557580587</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.350</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.350</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_ticketdata_ID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<foreign-key id="456" parent="57" name="FK_TicketData_TicketID">
<ObjectId>30623152</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.667</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.667</ModifiedTimestamp>
<ColNames>TicketID</ColNames>
<RefTableId>1477580302</RefTableId>
<RefSchemaName>dbo</RefSchemaName>
<RefTableName>ticket</RefTableName>
<RefKeyName>PK_ticket_ID</RefKeyName>
<RefColNames>ID</RefColNames>
</foreign-key>
<column id="457" parent="58" name="LockID">
<Position>1</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>113</SequenceIdentity>
</column>
<column id="458" parent="58" name="TicketID">
<Position>2</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="459" parent="58" name="UserID">
<Position>3</Position>
<DataType>nvarchar(50)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="460" parent="58" name="DateTime">
<Position>4</Position>
<DataType>datetime|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="461" parent="58" name="ExpiresOn">
<Position>5</Position>
<DataType>datetime|0</DataType>
<NotNull>1</NotNull>
</column>
<index id="462" parent="58" name="PK_ticketlock_LockID">
<Position>1</Position>
<ColNames>LockID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="463" parent="58" name="PK_ticketlock_LockID">
<ObjectId>1621580815</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.360</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.360</ModifiedTimestamp>
<ColNames>LockID</ColNames>
<UnderlyingIndexName>PK_ticketlock_LockID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<foreign-key id="464" parent="58" name="FK_Lock_Ticket">
<ObjectId>46623209</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.670</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.670</ModifiedTimestamp>
<ColNames>TicketID</ColNames>
<RefTableId>1477580302</RefTableId>
<RefSchemaName>dbo</RefSchemaName>
<RefTableName>ticket</RefTableName>
<RefKeyName>PK_ticket_ID</RefKeyName>
<RefColNames>ID</RefColNames>
</foreign-key>
<column id="465" parent="59" name="TypeID">
<Position>1</Position>
<DataType>varchar(50)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="466" parent="59" name="CreatedBy">
<Position>2</Position>
<DataType>nvarchar(50)|0</DataType>
</column>
<column id="467" parent="59" name="CreationDate">
<Position>3</Position>
<DataType>datetime|0</DataType>
</column>
<column id="468" parent="59" name="ModifiedBy">
<Position>4</Position>
<DataType>nvarchar(50)|0</DataType>
</column>
<column id="469" parent="59" name="ModificationDate">
<Position>5</Position>
<DataType>datetime|0</DataType>
</column>
<column id="470" parent="59" name="ArabicLabel">
<Position>6</Position>
<DataType>nvarchar(150)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="471" parent="59" name="EnglishLabel">
<Position>7</Position>
<DataType>nvarchar(150)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="472" parent="59" name="Enabled">
<Position>8</Position>
<DataType>tinyint|0</DataType>
</column>
<index id="473" parent="59" name="PK_type_TypeID">
<Position>1</Position>
<ColNames>TypeID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="474" parent="59" name="PK_type_TypeID">
<ObjectId>1653580929</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.367</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.367</ModifiedTimestamp>
<ColNames>TypeID</ColNames>
<UnderlyingIndexName>PK_type_TypeID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="475" parent="60" name="ID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="476" parent="60" name="SubCategory">
<Position>2</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="477" parent="60" name="ArabicLabel">
<Position>3</Position>
<DataType>nvarchar(150)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="478" parent="60" name="EnglishLabel">
<Position>4</Position>
<DataType>nvarchar(150)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="479" parent="60" name="CreationDate">
<Position>5</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="480" parent="60" name="ModificationDate">
<Position>6</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="481" parent="60" name="CreatedBy">
<Position>7</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="482" parent="60" name="ModifiedBy">
<Position>8</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="483" parent="60" name="Configuration">
<Position>9</Position>
<DataType>nvarchar(max)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="484" parent="60" name="Enabled">
<Position>10</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="485" parent="60" name="Principals">
<Position>11</Position>
<DataType>nvarchar(max)|0</DataType>
</column>
<index id="486" parent="60" name="PK_topic_ID">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="487" parent="60" name="PK_topic_ID">
<ObjectId>1685581043</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.370</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.370</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_topic_ID</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<foreign-key id="488" parent="60" name="FK_Topic_SubCategory">
<ObjectId>62623266</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.670</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.670</ModifiedTimestamp>
<ColNames>SubCategory</ColNames>
<RefTableId>1413580074</RefTableId>
<RefSchemaName>dbo</RefSchemaName>
<RefTableName>subcategory</RefTableName>
<RefKeyName>PK_subcategory_ID</RefKeyName>
<RefColNames>ID</RefColNames>
</foreign-key>
<column id="489" parent="61" name="ID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>1</SequenceIdentity>
</column>
<column id="490" parent="61" name="TopicID">
<Position>2</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="491" parent="61" name="SLAID">
<Position>3</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="492" parent="61" name="SLALevel">
<Position>4</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="493" parent="61" name="CreationDate">
<Position>5</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="494" parent="61" name="CreatedBy">
<Position>6</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="495" parent="61" name="ModifiedBy">
<Position>7</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="496" parent="61" name="ModificationDate">
<Position>8</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="497" parent="61" name="SLAImpl">
<Position>9</Position>
<DataType>varchar(500)|0</DataType>
</column>
<index id="498" parent="61" name="PK_TopicSLA_1">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<index id="499" parent="61" name="IX_TopicSLA">
<Position>2</Position>
<ColNames>SLAID
TopicID
SLALevel</ColNames>
<Unique>1</Unique>
</index>
<key id="500" parent="61" name="PK_TopicSLA_1">
<ObjectId>1717581157</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.373</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.373</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_TopicSLA_1</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<foreign-key id="501" parent="61" name="FK_TopicSLA_topic">
<ObjectId>94623380</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.677</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.677</ModifiedTimestamp>
<ColNames>TopicID</ColNames>
<RefTableId>1669580986</RefTableId>
<RefSchemaName>dbo</RefSchemaName>
<RefTableName>topic</RefTableName>
<RefKeyName>PK_topic_ID</RefKeyName>
<RefColNames>ID</RefColNames>
</foreign-key>
<foreign-key id="502" parent="61" name="FK_TopicSLA_sla">
<ObjectId>78623323</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.673</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.673</ModifiedTimestamp>
<ColNames>SLAID</ColNames>
<RefTableId>1221579390</RefTableId>
<RefSchemaName>dbo</RefSchemaName>
<RefTableName>sla</RefTableName>
<RefKeyName>PK_sla_ID</RefKeyName>
<RefColNames>ID</RefColNames>
</foreign-key>
<column id="503" parent="62" name="id">
<Position>1</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>1</SequenceIdentity>
</column>
<column id="504" parent="62" name="assigne">
<Position>2</Position>
<DataType>nvarchar(50)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="505" parent="62" name="type">
<Position>3</Position>
<DataType>varchar(10)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="506" parent="62" name="topicId">
<Position>4</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="507" parent="62" name="admin">
<Position>5</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="508" parent="62" name="canCreate">
<Position>6</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="509" parent="62" name="canRead">
<Position>7</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="510" parent="62" name="canDelete">
<Position>8</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="511" parent="62" name="canWrite">
<Position>9</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="512" parent="62" name="canRunReport">
<Position>10</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="513" parent="62" name="CreatedBy">
<Position>11</Position>
<DataType>nvarchar(50)|0</DataType>
</column>
<column id="514" parent="62" name="CreationDate">
<Position>12</Position>
<DataType>datetime|0</DataType>
</column>
<column id="515" parent="62" name="ModifiedBy">
<Position>13</Position>
<DataType>nvarchar(50)|0</DataType>
</column>
<column id="516" parent="62" name="ModificationDate">
<Position>14</Position>
<DataType>datetime|0</DataType>
</column>
<index id="517" parent="62" name="PK_TopicsPermissions">
<Position>1</Position>
<ColNames>id</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="518" parent="62" name="PK_TopicsPermissions">
<ObjectId>1749581271</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.380</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.380</ModifiedTimestamp>
<ColNames>id</ColNames>
<UnderlyingIndexName>PK_TopicsPermissions</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<foreign-key id="519" parent="62" name="FK_TopicsPermissions_topic">
<ObjectId>110623437</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.680</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.680</ModifiedTimestamp>
<ColNames>topicId</ColNames>
<RefTableId>1669580986</RefTableId>
<RefSchemaName>dbo</RefSchemaName>
<RefTableName>topic</RefTableName>
<RefKeyName>PK_topic_ID</RefKeyName>
<RefColNames>ID</RefColNames>
</foreign-key>
<column id="520" parent="63" name="ID">
<Position>1</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>1</SequenceIdentity>
</column>
<column id="521" parent="63" name="UserID">
<Position>2</Position>
<DataType>nvarchar(50)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="522" parent="63" name="CreationDate">
<Position>3</Position>
<DataType>datetime|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="523" parent="63" name="CreatedBy">
<Position>4</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="524" parent="63" name="ModifiedBy">
<Position>5</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="525" parent="63" name="ModificationDate">
<Position>6</Position>
<DataType>varchar(8000)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="526" parent="63" name="EmailsNotifications">
<Position>7</Position>
<DataType>tinyint|0</DataType>
<NotNull>1</NotNull>
<DefaultExpression>0</DefaultExpression>
</column>
<column id="527" parent="63" name="Language">
<Position>8</Position>
<DataType>nchar(20)|0</DataType>
</column>
<column id="528" parent="63" name="Avatar">
<Position>9</Position>
<DataType>image|0</DataType>
</column>
<column id="529" parent="63" name="SLAEmails">
<Position>10</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="530" parent="63" name="TicketCreationEmails">
<Position>11</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="531" parent="63" name="TicketEditEmails">
<Position>12</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="532" parent="63" name="TicketAssignEmails">
<Position>13</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="533" parent="63" name="EmailDigest">
<Position>14</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="534" parent="63" name="IncludeAttatchments">
<Position>15</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="535" parent="63" name="AutoSubOnCreate">
<Position>16</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="536" parent="63" name="AutoSubOnClose">
<Position>17</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="537" parent="63" name="AutoSubOnEdit">
<Position>18</Position>
<DataType>tinyint|0</DataType>
</column>
<column id="538" parent="63" name="AutoSubOnAssign">
<Position>19</Position>
<DataType>tinyint|0</DataType>
</column>
<index id="539" parent="63" name="PK_userPreferences">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="540" parent="63" name="PK_userPreferences">
<ObjectId>1781581385</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.383</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.383</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_userPreferences</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="541" parent="64" name="ID">
<Position>1</Position>
<DataType>bigint|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>1</SequenceIdentity>
</column>
<column id="542" parent="64" name="userID">
<Position>2</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="543" parent="64" name="roleID">
<Position>3</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="544" parent="64" name="CreationDate">
<Position>4</Position>
<DataType>datetime|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="545" parent="64" name="CreatedBy">
<Position>5</Position>
<DataType>nvarchar(50)|0</DataType>
<NotNull>1</NotNull>
</column>
<index id="546" parent="64" name="PK_userspermissions">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="547" parent="64" name="PK_userspermissions">
<ObjectId>1813581499</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.387</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.387</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_userspermissions</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<foreign-key id="548" parent="64" name="FK_userspermissions_userspermissions">
<ObjectId>126623494</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.683</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.683</ModifiedTimestamp>
<ColNames>ID</ColNames>
<RefTableId>1797581442</RefTableId>
<RefSchemaName>dbo</RefSchemaName>
<RefTableName>userroles</RefTableName>
<RefKeyName>PK_userspermissions</RefKeyName>
<RefColNames>ID</RefColNames>
</foreign-key>
<column id="549" parent="65" name="ID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>1</SequenceIdentity>
</column>
<column id="550" parent="65" name="UserID">
<Position>2</Position>
<DataType>nvarchar(50)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="551" parent="65" name="FirstName">
<Position>3</Position>
<DataType>nvarchar(500)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="552" parent="65" name="LastName">
<Position>4</Position>
<DataType>nvarchar(500)|0</DataType>
</column>
<column id="553" parent="65" name="Email">
<Position>5</Position>
<DataType>nvarchar(250)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="554" parent="65" name="Password">
<Position>6</Position>
<DataType>nvarchar(256)|0</DataType>
</column>
<column id="555" parent="65" name="StaffID">
<Position>7</Position>
<DataType>nvarchar(20)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="556" parent="65" name="Enabled">
<Position>8</Position>
<DataType>tinyint|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="557" parent="65" name="CreationDate">
<Position>9</Position>
<DataType>varchar(8000)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="558" parent="65" name="ModificationDate">
<Position>10</Position>
<DataType>varchar(8000)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="559" parent="65" name="CreatedBy">
<Position>11</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="560" parent="65" name="ModifiedBy">
<Position>12</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="561" parent="65" name="Locale">
<Position>13</Position>
<DataType>nchar(10)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="562" parent="65" name="LoginAttempts">
<Position>14</Position>
<DataType>int|0</DataType>
<DefaultExpression>3</DefaultExpression>
</column>
<column id="563" parent="65" name="SystemUser">
<Position>15</Position>
<DataType>tinyint|0</DataType>
<DefaultExpression>0</DefaultExpression>
</column>
<column id="564" parent="65" name="Title">
<Position>16</Position>
<DataType>nvarchar(150)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="565" parent="65" name="Department">
<Position>17</Position>
<DataType>nvarchar(50)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="566" parent="65" name="LDAPUser">
<Position>18</Position>
<DataType>tinyint|0</DataType>
</column>
<index id="567" parent="65" name="PK_users_1">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="568" parent="65" name="PK_users_1">
<ObjectId>1845581613</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.393</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.393</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_users_1</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<column id="569" parent="66" name="ID">
<Position>1</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>1</SequenceIdentity>
</column>
<column id="570" parent="66" name="UserID">
<Position>2</Position>
<DataType>nvarchar(50)|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="571" parent="66" name="TopicID">
<Position>3</Position>
<DataType>int|0</DataType>
<NotNull>1</NotNull>
</column>
<column id="572" parent="66" name="CreatedBy">
<Position>4</Position>
<DataType>nvarchar(45)|0</DataType>
<NotNull>1</NotNull>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="573" parent="66" name="CreationDate">
<Position>5</Position>
<DataType>datetime|0</DataType>
<NotNull>1</NotNull>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="574" parent="66" name="ModifiedBy">
<Position>6</Position>
<DataType>nvarchar(45)|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="575" parent="66" name="ModificationDate">
<Position>7</Position>
<DataType>datetime|0</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="576" parent="66" name="Status">
<Position>8</Position>
<DataType>tinyint|0</DataType>
<NotNull>1</NotNull>
</column>
<index id="577" parent="66" name="PK_usertopic">
<Position>1</Position>
<ColNames>ID</ColNames>
<Clustering>1</Clustering>
<Unique>1</Unique>
</index>
<key id="578" parent="66" name="PK_usertopic">
<ObjectId>1877581727</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.397</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.397</ModifiedTimestamp>
<ColNames>ID</ColNames>
<UnderlyingIndexName>PK_usertopic</UnderlyingIndexName>
<Primary>1</Primary>
</key>
<foreign-key id="579" parent="66" name="FK_UsersTopic_Topic">
<ObjectId>142623551</ObjectId>
<CreatedTimestamp>2018-09-11.14:24:11.683</CreatedTimestamp>
<ModifiedTimestamp>2018-09-11.14:24:11.683</ModifiedTimestamp>
<ColNames>TopicID</ColNames>
<RefTableId>1669580986</RefTableId>
<RefSchemaName>dbo</RefSchemaName>
<RefTableName>topic</RefTableName>
<RefKeyName>PK_topic_ID</RefKeyName>
<RefColNames>ID</RefColNames>
</foreign-key>
<argument id="580" parent="67" name="@username">
<DataType>sysname|0</DataType>
</argument>
</database-model>
</dataSource>
<?xml version="1.0" encoding="UTF-8"?>
<storage-settings staging-layout="plain" base-layout="schema-zip" language="TSQL"/>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$" charset="UTF-8" />
</component>
</project>
<component name="libraryTable">
<library name="Maven: antlr:antlr:2.7.7">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/antlr/antlr/2.7.7/antlr-2.7.7.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/antlr/antlr/2.7.7/antlr-2.7.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/antlr/antlr/2.7.7/antlr-2.7.7-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: aopalliance:aopalliance:1.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/aopalliance/aopalliance/1.0/aopalliance-1.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/aopalliance/aopalliance/1.0/aopalliance-1.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/aopalliance/aopalliance/1.0/aopalliance-1.0-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: ch.qos.logback:logback-classic:1.1.11">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-classic/1.1.11/logback-classic-1.1.11.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-classic/1.1.11/logback-classic-1.1.11-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-classic/1.1.11/logback-classic-1.1.11-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: ch.qos.logback:logback-core:1.1.11">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.1.11/logback-core-1.1.11.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.1.11/logback-core-1.1.11-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.1.11/logback-core-1.1.11-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: com.fasterxml:classmate:1.3.4">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/classmate/1.3.4/classmate-1.3.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/classmate/1.3.4/classmate-1.3.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/classmate/1.3.4/classmate-1.3.4-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.8.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.8.0/jackson-annotations-2.8.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.8.0/jackson-annotations-2.8.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.8.0/jackson-annotations-2.8.0-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.core:jackson-core:2.8.11">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.8.11/jackson-core-2.8.11.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.8.11/jackson-core-2.8.11-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.8.11/jackson-core-2.8.11-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.core:jackson-databind:2.8.11.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.8.11.2/jackson-databind-2.8.11.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.8.11.2/jackson-databind-2.8.11.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.8.11.2/jackson-databind-2.8.11.2-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: com.jayway.jsonpath:json-path:2.2.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/jayway/jsonpath/json-path/2.2.0/json-path-2.2.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/jayway/jsonpath/json-path/2.2.0/json-path-2.2.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/jayway/jsonpath/json-path/2.2.0/json-path-2.2.0-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: com.microsoft.sqlserver:mssql-jdbc:7.0.0.jre8">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/microsoft/sqlserver/mssql-jdbc/7.0.0.jre8/mssql-jdbc-7.0.0.jre8.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/microsoft/sqlserver/mssql-jdbc/7.0.0.jre8/mssql-jdbc-7.0.0.jre8-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/microsoft/sqlserver/mssql-jdbc/7.0.0.jre8/mssql-jdbc-7.0.0.jre8-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: com.sun.mail:javax.mail:1.5.6">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/sun/mail/javax.mail/1.5.6/javax.mail-1.5.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/sun/mail/javax.mail/1.5.6/javax.mail-1.5.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/sun/mail/javax.mail/1.5.6/javax.mail-1.5.6-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: com.zaxxer:HikariCP:3.1.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/zaxxer/HikariCP/3.1.0/HikariCP-3.1.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/zaxxer/HikariCP/3.1.0/HikariCP-3.1.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/zaxxer/HikariCP/3.1.0/HikariCP-3.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: dom4j:dom4j:1.6.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/dom4j/dom4j/1.6.1/dom4j-1.6.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/dom4j/dom4j/1.6.1/dom4j-1.6.1-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: io.jsonwebtoken:jjwt:0.9.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/io/jsonwebtoken/jjwt/0.9.1/jjwt-0.9.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/io/jsonwebtoken/jjwt/0.9.1/jjwt-0.9.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/io/jsonwebtoken/jjwt/0.9.1/jjwt-0.9.1-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: javax.activation:activation:1.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/javax/activation/activation/1.1/activation-1.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/javax/activation/activation/1.1/activation-1.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/javax/activation/activation/1.1/activation-1.1-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: javax.transaction:javax.transaction-api:1.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/javax/transaction/javax.transaction-api/1.2/javax.transaction-api-1.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/javax/transaction/javax.transaction-api/1.2/javax.transaction-api-1.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/javax/transaction/javax.transaction-api/1.2/javax.transaction-api-1.2-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: javax.validation:validation-api:1.1.0.Final">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/javax/validation/validation-api/1.1.0.Final/validation-api-1.1.0.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/javax/validation/validation-api/1.1.0.Final/validation-api-1.1.0.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/javax/validation/validation-api/1.1.0.Final/validation-api-1.1.0.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: junit:junit:4.12">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.12/junit-4.12.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.12/junit-4.12-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.12/junit-4.12-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: net.minidev:accessors-smart:1.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/net/minidev/accessors-smart/1.1/accessors-smart-1.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/net/minidev/accessors-smart/1.1/accessors-smart-1.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/net/minidev/accessors-smart/1.1/accessors-smart-1.1-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: net.minidev:json-smart:2.2.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/net/minidev/json-smart/2.2.1/json-smart-2.2.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/net/minidev/json-smart/2.2.1/json-smart-2.2.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/net/minidev/json-smart/2.2.1/json-smart-2.2.1-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.apache.tomcat.embed:tomcat-embed-core:8.5.34">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-core/8.5.34/tomcat-embed-core-8.5.34.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-core/8.5.34/tomcat-embed-core-8.5.34-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-core/8.5.34/tomcat-embed-core-8.5.34-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.apache.tomcat.embed:tomcat-embed-el:8.5.34">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-el/8.5.34/tomcat-embed-el-8.5.34.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-el/8.5.34/tomcat-embed-el-8.5.34-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-el/8.5.34/tomcat-embed-el-8.5.34-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:8.5.34">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-websocket/8.5.34/tomcat-embed-websocket-8.5.34.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-websocket/8.5.34/tomcat-embed-websocket-8.5.34-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/embed/tomcat-embed-websocket/8.5.34/tomcat-embed-websocket-8.5.34-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.apache.tomcat:tomcat-annotations-api:8.5.34">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/tomcat-annotations-api/8.5.34/tomcat-annotations-api-8.5.34.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/tomcat-annotations-api/8.5.34/tomcat-annotations-api-8.5.34-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/tomcat-annotations-api/8.5.34/tomcat-annotations-api-8.5.34-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.apache.tomcat:tomcat-jdbc:8.5.34">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/tomcat-jdbc/8.5.34/tomcat-jdbc-8.5.34.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/tomcat-jdbc/8.5.34/tomcat-jdbc-8.5.34-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/tomcat-jdbc/8.5.34/tomcat-jdbc-8.5.34-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.apache.tomcat:tomcat-juli:8.5.34">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/tomcat-juli/8.5.34/tomcat-juli-8.5.34.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/tomcat-juli/8.5.34/tomcat-juli-8.5.34-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tomcat/tomcat-juli/8.5.34/tomcat-juli-8.5.34-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.aspectj:aspectjweaver:1.8.13">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/aspectj/aspectjweaver/1.8.13/aspectjweaver-1.8.13.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/aspectj/aspectjweaver/1.8.13/aspectjweaver-1.8.13-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/aspectj/aspectjweaver/1.8.13/aspectjweaver-1.8.13-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.assertj:assertj-core:2.6.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/assertj/assertj-core/2.6.0/assertj-core-2.6.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/assertj/assertj-core/2.6.0/assertj-core-2.6.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/assertj/assertj-core/2.6.0/assertj-core-2.6.0-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.hamcrest:hamcrest-core:1.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.hamcrest:hamcrest-library:1.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-library/1.3/hamcrest-library-1.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-library/1.3/hamcrest-library-1.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-library/1.3/hamcrest-library-1.3-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.hibernate.common:hibernate-commons-annotations:5.0.1.Final">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/common/hibernate-commons-annotations/5.0.1.Final/hibernate-commons-annotations-5.0.1.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/common/hibernate-commons-annotations/5.0.1.Final/hibernate-commons-annotations-5.0.1.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/common/hibernate-commons-annotations/5.0.1.Final/hibernate-commons-annotations-5.0.1.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.hibernate:hibernate-core:5.0.12.Final">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/hibernate-core/5.0.12.Final/hibernate-core-5.0.12.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/hibernate-core/5.0.12.Final/hibernate-core-5.0.12.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/hibernate-core/5.0.12.Final/hibernate-core-5.0.12.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.hibernate:hibernate-entitymanager:5.0.12.Final">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/hibernate-entitymanager/5.0.12.Final/hibernate-entitymanager-5.0.12.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/hibernate-entitymanager/5.0.12.Final/hibernate-entitymanager-5.0.12.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/hibernate-entitymanager/5.0.12.Final/hibernate-entitymanager-5.0.12.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.hibernate:hibernate-envers:5.0.12.Final">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/hibernate-envers/5.0.12.Final/hibernate-envers-5.0.12.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/hibernate-envers/5.0.12.Final/hibernate-envers-5.0.12.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/hibernate-envers/5.0.12.Final/hibernate-envers-5.0.12.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.hibernate:hibernate-jpamodelgen:5.0.12.Final">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/hibernate-jpamodelgen/5.0.12.Final/hibernate-jpamodelgen-5.0.12.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/hibernate-jpamodelgen/5.0.12.Final/hibernate-jpamodelgen-5.0.12.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/hibernate-jpamodelgen/5.0.12.Final/hibernate-jpamodelgen-5.0.12.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.hibernate:hibernate-validator:5.3.6.Final">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/hibernate-validator/5.3.6.Final/hibernate-validator-5.3.6.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/hibernate-validator/5.3.6.Final/hibernate-validator-5.3.6.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/hibernate-validator/5.3.6.Final/hibernate-validator-5.3.6.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/javax/persistence/hibernate-jpa-2.1-api/1.0.0.Final/hibernate-jpa-2.1-api-1.0.0.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/javax/persistence/hibernate-jpa-2.1-api/1.0.0.Final/hibernate-jpa-2.1-api-1.0.0.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/hibernate/javax/persistence/hibernate-jpa-2.1-api/1.0.0.Final/hibernate-jpa-2.1-api-1.0.0.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.javassist:javassist:3.21.0-GA">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/javassist/javassist/3.21.0-GA/javassist-3.21.0-GA.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/javassist/javassist/3.21.0-GA/javassist-3.21.0-GA-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/javassist/javassist/3.21.0-GA/javassist-3.21.0-GA-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.jboss:jandex:2.0.0.Final">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/jandex/2.0.0.Final/jandex-2.0.0.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/jandex/2.0.0.Final/jandex-2.0.0.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/jandex/2.0.0.Final/jandex-2.0.0.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/logging/jboss-logging/3.3.2.Final/jboss-logging-3.3.2.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/logging/jboss-logging/3.3.2.Final/jboss-logging-3.3.2.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/logging/jboss-logging/3.3.2.Final/jboss-logging-3.3.2.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.mockito:mockito-core:1.10.19">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-core/1.10.19/mockito-core-1.10.19.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-core/1.10.19/mockito-core-1.10.19-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-core/1.10.19/mockito-core-1.10.19-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.objenesis:objenesis:2.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/objenesis/objenesis/2.1/objenesis-2.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/objenesis/objenesis/2.1/objenesis-2.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/objenesis/objenesis/2.1/objenesis-2.1-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.ow2.asm:asm:5.0.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/5.0.3/asm-5.0.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/5.0.3/asm-5.0.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/5.0.3/asm-5.0.3-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.skyscreamer:jsonassert:1.4.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/skyscreamer/jsonassert/1.4.0/jsonassert-1.4.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/skyscreamer/jsonassert/1.4.0/jsonassert-1.4.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/skyscreamer/jsonassert/1.4.0/jsonassert-1.4.0-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.slf4j:jcl-over-slf4j:1.7.25">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jcl-over-slf4j/1.7.25/jcl-over-slf4j-1.7.25.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jcl-over-slf4j/1.7.25/jcl-over-slf4j-1.7.25-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jcl-over-slf4j/1.7.25/jcl-over-slf4j-1.7.25-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.slf4j:jul-to-slf4j:1.7.25">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.25/jul-to-slf4j-1.7.25.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.25/jul-to-slf4j-1.7.25-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/jul-to-slf4j/1.7.25/jul-to-slf4j-1.7.25-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.slf4j:log4j-over-slf4j:1.7.25">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/log4j-over-slf4j/1.7.25/log4j-over-slf4j-1.7.25.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/log4j-over-slf4j/1.7.25/log4j-over-slf4j-1.7.25-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/log4j-over-slf4j/1.7.25/log4j-over-slf4j-1.7.25-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.slf4j:slf4j-api:1.7.25">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot:1.5.16.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/1.5.16.RELEASE/spring-boot-1.5.16.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/1.5.16.RELEASE/spring-boot-1.5.16.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/1.5.16.RELEASE/spring-boot-1.5.16.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-actuator:1.5.16.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-actuator/1.5.16.RELEASE/spring-boot-actuator-1.5.16.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-actuator/1.5.16.RELEASE/spring-boot-actuator-1.5.16.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-actuator/1.5.16.RELEASE/spring-boot-actuator-1.5.16.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-autoconfigure:1.5.16.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/1.5.16.RELEASE/spring-boot-autoconfigure-1.5.16.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/1.5.16.RELEASE/spring-boot-autoconfigure-1.5.16.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-autoconfigure/1.5.16.RELEASE/spring-boot-autoconfigure-1.5.16.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter:1.5.16.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/1.5.16.RELEASE/spring-boot-starter-1.5.16.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/1.5.16.RELEASE/spring-boot-starter-1.5.16.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/1.5.16.RELEASE/spring-boot-starter-1.5.16.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-actuator:1.5.16.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-actuator/1.5.16.RELEASE/spring-boot-starter-actuator-1.5.16.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-actuator/1.5.16.RELEASE/spring-boot-starter-actuator-1.5.16.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-actuator/1.5.16.RELEASE/spring-boot-starter-actuator-1.5.16.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-aop:1.5.16.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-aop/1.5.16.RELEASE/spring-boot-starter-aop-1.5.16.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-aop/1.5.16.RELEASE/spring-boot-starter-aop-1.5.16.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-aop/1.5.16.RELEASE/spring-boot-starter-aop-1.5.16.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-data-jpa:1.5.16.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-data-jpa/1.5.16.RELEASE/spring-boot-starter-data-jpa-1.5.16.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-data-jpa/1.5.16.RELEASE/spring-boot-starter-data-jpa-1.5.16.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-data-jpa/1.5.16.RELEASE/spring-boot-starter-data-jpa-1.5.16.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-jdbc:1.5.16.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-jdbc/1.5.16.RELEASE/spring-boot-starter-jdbc-1.5.16.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-jdbc/1.5.16.RELEASE/spring-boot-starter-jdbc-1.5.16.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-jdbc/1.5.16.RELEASE/spring-boot-starter-jdbc-1.5.16.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-logging:1.5.16.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/1.5.16.RELEASE/spring-boot-starter-logging-1.5.16.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/1.5.16.RELEASE/spring-boot-starter-logging-1.5.16.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/1.5.16.RELEASE/spring-boot-starter-logging-1.5.16.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-mail:1.5.16.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-mail/1.5.16.RELEASE/spring-boot-starter-mail-1.5.16.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-mail/1.5.16.RELEASE/spring-boot-starter-mail-1.5.16.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-mail/1.5.16.RELEASE/spring-boot-starter-mail-1.5.16.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-security:1.5.16.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-security/1.5.16.RELEASE/spring-boot-starter-security-1.5.16.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-security/1.5.16.RELEASE/spring-boot-starter-security-1.5.16.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-security/1.5.16.RELEASE/spring-boot-starter-security-1.5.16.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-test:1.5.16.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-test/1.5.16.RELEASE/spring-boot-starter-test-1.5.16.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-test/1.5.16.RELEASE/spring-boot-starter-test-1.5.16.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-test/1.5.16.RELEASE/spring-boot-starter-test-1.5.16.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-tomcat:1.5.16.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/1.5.16.RELEASE/spring-boot-starter-tomcat-1.5.16.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/1.5.16.RELEASE/spring-boot-starter-tomcat-1.5.16.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/1.5.16.RELEASE/spring-boot-starter-tomcat-1.5.16.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-web:1.5.16.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-web/1.5.16.RELEASE/spring-boot-starter-web-1.5.16.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-web/1.5.16.RELEASE/spring-boot-starter-web-1.5.16.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-web/1.5.16.RELEASE/spring-boot-starter-web-1.5.16.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-test:1.5.16.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test/1.5.16.RELEASE/spring-boot-test-1.5.16.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test/1.5.16.RELEASE/spring-boot-test-1.5.16.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test/1.5.16.RELEASE/spring-boot-test-1.5.16.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:1.5.16.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test-autoconfigure/1.5.16.RELEASE/spring-boot-test-autoconfigure-1.5.16.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test-autoconfigure/1.5.16.RELEASE/spring-boot-test-autoconfigure-1.5.16.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-test-autoconfigure/1.5.16.RELEASE/spring-boot-test-autoconfigure-1.5.16.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.data:spring-data-commons:1.13.15.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-commons/1.13.15.RELEASE/spring-data-commons-1.13.15.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-commons/1.13.15.RELEASE/spring-data-commons-1.13.15.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-commons/1.13.15.RELEASE/spring-data-commons-1.13.15.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.data:spring-data-jpa:1.11.15.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-jpa/1.11.15.RELEASE/spring-data-jpa-1.11.15.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-jpa/1.11.15.RELEASE/spring-data-jpa-1.11.15.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/data/spring-data-jpa/1.11.15.RELEASE/spring-data-jpa-1.11.15.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.ldap:spring-ldap-core:2.3.2.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/ldap/spring-ldap-core/2.3.2.RELEASE/spring-ldap-core-2.3.2.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/ldap/spring-ldap-core/2.3.2.RELEASE/spring-ldap-core-2.3.2.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/ldap/spring-ldap-core/2.3.2.RELEASE/spring-ldap-core-2.3.2.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.mobile:spring-mobile-device:1.1.5.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/mobile/spring-mobile-device/1.1.5.RELEASE/spring-mobile-device-1.1.5.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/mobile/spring-mobile-device/1.1.5.RELEASE/spring-mobile-device-1.1.5.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/mobile/spring-mobile-device/1.1.5.RELEASE/spring-mobile-device-1.1.5.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.security:spring-security-config:4.2.8.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/security/spring-security-config/4.2.8.RELEASE/spring-security-config-4.2.8.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/security/spring-security-config/4.2.8.RELEASE/spring-security-config-4.2.8.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/security/spring-security-config/4.2.8.RELEASE/spring-security-config-4.2.8.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.security:spring-security-core:4.2.8.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/security/spring-security-core/4.2.8.RELEASE/spring-security-core-4.2.8.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/security/spring-security-core/4.2.8.RELEASE/spring-security-core-4.2.8.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/security/spring-security-core/4.2.8.RELEASE/spring-security-core-4.2.8.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.security:spring-security-ldap:4.2.8.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/security/spring-security-ldap/4.2.8.RELEASE/spring-security-ldap-4.2.8.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/security/spring-security-ldap/4.2.8.RELEASE/spring-security-ldap-4.2.8.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/security/spring-security-ldap/4.2.8.RELEASE/spring-security-ldap-4.2.8.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.security:spring-security-test:4.2.8.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/security/spring-security-test/4.2.8.RELEASE/spring-security-test-4.2.8.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/security/spring-security-test/4.2.8.RELEASE/spring-security-test-4.2.8.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/security/spring-security-test/4.2.8.RELEASE/spring-security-test-4.2.8.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework.security:spring-security-web:4.2.8.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/security/spring-security-web/4.2.8.RELEASE/spring-security-web-4.2.8.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/security/spring-security-web/4.2.8.RELEASE/spring-security-web-4.2.8.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/security/spring-security-web/4.2.8.RELEASE/spring-security-web-4.2.8.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework:spring-aop:4.3.19.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/4.3.19.RELEASE/spring-aop-4.3.19.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/4.3.19.RELEASE/spring-aop-4.3.19.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aop/4.3.19.RELEASE/spring-aop-4.3.19.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework:spring-aspects:4.3.19.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aspects/4.3.19.RELEASE/spring-aspects-4.3.19.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aspects/4.3.19.RELEASE/spring-aspects-4.3.19.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-aspects/4.3.19.RELEASE/spring-aspects-4.3.19.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework:spring-beans:4.3.19.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/4.3.19.RELEASE/spring-beans-4.3.19.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/4.3.19.RELEASE/spring-beans-4.3.19.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/4.3.19.RELEASE/spring-beans-4.3.19.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework:spring-context:4.3.19.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/4.3.19.RELEASE/spring-context-4.3.19.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/4.3.19.RELEASE/spring-context-4.3.19.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context/4.3.19.RELEASE/spring-context-4.3.19.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework:spring-context-support:4.3.19.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context-support/4.3.19.RELEASE/spring-context-support-4.3.19.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context-support/4.3.19.RELEASE/spring-context-support-4.3.19.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-context-support/4.3.19.RELEASE/spring-context-support-4.3.19.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework:spring-core:4.3.19.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/4.3.19.RELEASE/spring-core-4.3.19.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/4.3.19.RELEASE/spring-core-4.3.19.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/4.3.19.RELEASE/spring-core-4.3.19.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework:spring-expression:4.3.19.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/4.3.19.RELEASE/spring-expression-4.3.19.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/4.3.19.RELEASE/spring-expression-4.3.19.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-expression/4.3.19.RELEASE/spring-expression-4.3.19.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework:spring-jdbc:4.3.19.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jdbc/4.3.19.RELEASE/spring-jdbc-4.3.19.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jdbc/4.3.19.RELEASE/spring-jdbc-4.3.19.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-jdbc/4.3.19.RELEASE/spring-jdbc-4.3.19.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework:spring-orm:4.3.19.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-orm/4.3.19.RELEASE/spring-orm-4.3.19.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-orm/4.3.19.RELEASE/spring-orm-4.3.19.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-orm/4.3.19.RELEASE/spring-orm-4.3.19.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework:spring-test:4.3.19.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-test/4.3.19.RELEASE/spring-test-4.3.19.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-test/4.3.19.RELEASE/spring-test-4.3.19.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-test/4.3.19.RELEASE/spring-test-4.3.19.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework:spring-tx:4.3.19.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-tx/4.3.19.RELEASE/spring-tx-4.3.19.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-tx/4.3.19.RELEASE/spring-tx-4.3.19.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-tx/4.3.19.RELEASE/spring-tx-4.3.19.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework:spring-web:4.3.19.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-web/4.3.19.RELEASE/spring-web-4.3.19.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-web/4.3.19.RELEASE/spring-web-4.3.19.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-web/4.3.19.RELEASE/spring-web-4.3.19.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.springframework:spring-webmvc:4.3.19.RELEASE">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-webmvc/4.3.19.RELEASE/spring-webmvc-4.3.19.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-webmvc/4.3.19.RELEASE/spring-webmvc-4.3.19.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-webmvc/4.3.19.RELEASE/spring-webmvc-4.3.19.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
<component name="libraryTable">
<library name="Maven: org.yaml:snakeyaml:1.17">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.17/snakeyaml-1.17.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.17/snakeyaml-1.17-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.17/snakeyaml-1.17-sources.jar!/" />
</SOURCES>
</library>
</component>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="FrameworkDetectionExcludesConfiguration">
<file type="web" url="file://$PROJECT_DIR$" />
</component>
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/miniCRM.iml" filepath="$PROJECT_DIR$/miniCRM.iml" />
</modules>
</component>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>
distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.4/apache-maven-3.5.4-bin.zip
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="Spring" name="Spring">
<configuration />
</facet>
<facet type="web" name="Web">
<configuration>
<webroots>
<root url="file://$MODULE_DIR$/src/main/webapp" relative="/" />
</webroots>
<sourceRoots>
<root url="file://$MODULE_DIR$/src/main/java" />
<root url="file://$MODULE_DIR$/src/main/resources" />
<root url="file://$MODULE_DIR$/target/generated-sources/annotations" />
</sourceRoots>
</configuration>
</facet>
<facet type="hibernate" name="Hibernate">
<configuration>
<datasource-map>
<unit-entry name="a.xml" value="00cbb7bb-4f38-439c-a2f4-00d75959c864" />
<unit-entry name="sessionFactory.xml" value="00cbb7bb-4f38-439c-a2f4-00d75959c864" />
</datasource-map>
<naming-strategy-map />
<deploymentDescriptor name="hibernate.cfg.xml" url="file://$MODULE_DIR$/src/main/java/com/sh/crm/config/sessionFactory.java.xml" />
<deploymentDescriptor name="hibernate.cfg.xml" url="file://$MODULE_DIR$/src/main/resources/hibernateJPAMapping.xml" />
<deploymentDescriptor name="hibernate.cfg.xml" url="file://$MODULE_DIR$/src/main/resources/sessionFactory.xml" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/target/generated-sources/annotations" isTestSource="false" generated="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-jpa:1.5.16.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:1.5.16.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:1.5.16.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:1.5.16.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:1.5.16.RELEASE" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.1.11" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.1.11" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.25" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:log4j-over-slf4j:1.7.25" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.17" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:1.5.16.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.8.13" level="project" />
<orderEntry type="library" name="Maven: org.hibernate:hibernate-core:5.0.12.Final" level="project" />
<orderEntry type="library" name="Maven: org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.javassist:javassist:3.21.0-GA" level="project" />
<orderEntry type="library" name="Maven: antlr:antlr:2.7.7" level="project" />
<orderEntry type="library" name="Maven: org.jboss:jandex:2.0.0.Final" level="project" />
<orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
<orderEntry type="library" name="Maven: org.hibernate.common:hibernate-commons-annotations:5.0.1.Final" level="project" />
<orderEntry type="library" name="Maven: org.hibernate:hibernate-entitymanager:5.0.12.Final" level="project" />
<orderEntry type="library" name="Maven: javax.transaction:javax.transaction-api:1.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-jpa:1.11.15.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:1.13.15.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-orm:4.3.19.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.25" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aspects:4.3.19.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:1.5.16.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-jdbc:8.5.34" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-juli:8.5.34" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:4.3.19.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-mail:1.5.16.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:4.3.19.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:4.3.19.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:4.3.19.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.sun.mail:javax.mail:1.5.6" level="project" />
<orderEntry type="library" name="Maven: javax.activation:activation:1.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-security:1.5.16.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:4.3.19.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-config:4.2.8.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-web:4.2.8.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.ldap:spring-ldap-core:2.3.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:4.3.19.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-core:4.3.19.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:4.3.19.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-ldap:4.2.8.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:4.2.8.RELEASE" level="project" />
<orderEntry type="library" name="Maven: aopalliance:aopalliance:1.0" level="project" />
<orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt:0.9.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.8.11.2" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.8.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.8.11" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-actuator:1.5.16.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator:1.5.16.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.mobile:spring-mobile-device:1.1.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:4.3.19.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-web:4.3.19.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:1.5.16.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.hibernate:hibernate-validator:5.3.6.Final" level="project" />
<orderEntry type="library" name="Maven: javax.validation:validation-api:1.1.0.Final" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.3.4" level="project" />
<orderEntry type="library" name="Maven: org.hibernate:hibernate-jpamodelgen:5.0.12.Final" level="project" />
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: com.microsoft.sqlserver:mssql-jdbc:7.0.0.jre8" level="project" />
<orderEntry type="library" name="Maven: org.hibernate:hibernate-envers:5.0.12.Final" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:1.5.16.RELEASE" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:8.5.34" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat:tomcat-annotations-api:8.5.34" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:8.5.34" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:8.5.34" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:1.5.16.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:1.5.16.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:1.5.16.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.2.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.2.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:2.6.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:1.10.19" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.4.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:4.3.19.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.security:spring-security-test:4.2.8.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.1.0" level="project" />
</component>
</module>
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven2 Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# M2_HOME - location of maven2's installed home dir
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z "$JAVA_HOME" ]; then
if [ -x "/usr/libexec/java_home" ]; then
export JAVA_HOME="`/usr/libexec/java_home`"
else
export JAVA_HOME="/Library/Java/Home"
fi
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=`java-config --jre-home`
fi
fi
if [ -z "$M2_HOME" ] ; then
## resolve links - $0 may be a link to maven's home
PRG="$0"
# need this for relative symlinks
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG="`dirname "$PRG"`/$link"
fi
done
saveddir=`pwd`
M2_HOME=`dirname "$PRG"`/..
# make it fully qualified
M2_HOME=`cd "$M2_HOME" && pwd`
cd "$saveddir"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --unix "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Migwn, ensure paths are in UNIX format before anything is touched
if $mingw ; then
[ -n "$M2_HOME" ] &&
M2_HOME="`(cd "$M2_HOME"; pwd)`"
[ -n "$JAVA_HOME" ] &&
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
# TODO classpath?
fi
if [ -z "$JAVA_HOME" ]; then
javaExecutable="`which javac`"
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
if $darwin ; then
javaHome="`dirname \"$javaExecutable\"`"
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
else
javaExecutable="`readlink -f \"$javaExecutable\"`"
fi
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
fi
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`which java`"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
if [ -z "$1" ]
then
echo "Path not specified to find_maven_basedir"
return 1
fi
basedir="$1"
wdir="$1"
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if [ -d "${wdir}" ]; then
wdir=`cd "$wdir/.."; pwd`
fi
# end of workaround
done
echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
fi
}
BASE_DIR=`find_maven_basedir "$(pwd)"`
if [ -z "$BASE_DIR" ]; then
exit 1;
fi
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
echo $MAVEN_PROJECTBASEDIR
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --path --windows "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
$MAVEN_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven2 Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%" == "on" pause
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
exit /B %ERROR_CODE%
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sh</groupId>
<artifactId>miniCRM</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>Mini CRM With Ticketing Module</name>
<description>A mini CRM system for small businesses</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.16.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ldap</groupId>
<artifactId>spring-ldap-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-ldap</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.mobile</groupId>
<artifactId>spring-mobile-device</artifactId>
<version>LATEST</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>7.0.0.jre8</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-envers</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
package com.sh.crm.config.general;
import com.sh.crm.general.exceptions.BasicException;
import com.sh.crm.general.exceptions.GeneralException;
import org.springframework.boot.context.config.ResourceNotFoundException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import java.io.IOException;
import java.sql.SQLException;
@ControllerAdvice
public class GeneralHandler {
@ExceptionHandler(value = {IOException.class, SQLException.class})
public ResponseEntity<ResponseCode> ExceptionHandler(Exception ex) {
ResponseCode responseCode = new ResponseCode("-1", "General Exception Occurred Please Contact Your Admin");
return new ResponseEntity<ResponseCode>(responseCode, HttpStatus.BAD_REQUEST);
}
@ExceptionHandler(value = {GeneralException.class, BasicException.class})
public ResponseEntity<ResponseCode> ExceptionHandler(BasicException ex) {
ResponseCode responseCode = new ResponseCode(ex.getErrorCode(), ex.getMessage());
return new ResponseEntity<ResponseCode>(responseCode, HttpStatus.BAD_REQUEST);
}
@ExceptionHandler(BadCredentialsException.class)
public ResponseEntity<ResponseCode> ExceptionHandler(BadCredentialsException ex) {
ResponseCode responseCode = new ResponseCode("-2", "Invalid Username or Password");
return new ResponseEntity<ResponseCode>(responseCode, HttpStatus.BAD_REQUEST);
}
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<ResponseCode> ExceptionHandler(ResourceNotFoundException ex) {
ResponseCode responseCode = new ResponseCode("-3", "Service Not Found");
return new ResponseEntity<ResponseCode>(responseCode, HttpStatus.BAD_REQUEST);
}
}
package com.sh.crm.config.general;
import com.sh.crm.general.Errors;
public class ResponseCode {
private String code;
private String msg;
public ResponseCode(String errorCode, String errorMsg) {
super();
this.code = errorCode;
this.msg = errorMsg;
}
public ResponseCode(Errors error) {
this.code = error.getCode();
this.msg = error.getDesc();
}
public ResponseCode() {
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
package com.sh.crm.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jndi.JndiObjectFactoryBean;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaSessionFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.util.Properties;
@Configuration
@EnableTransactionManagement
@EnableJpaAuditing(auditorAwareRef = "auditorProvider")
@EnableJpaRepositories(basePackages = "com.sh.crm.jpa.repos")
public class JPAConfig {
@Bean
public AuditorAware<String> auditorProvider() {
return new SpringSecurityAuditorAware();
}
}
package com.sh.crm.config;
import com.sh.crm.security.model.JwtUser;
import org.springframework.data.domain.AuditorAware;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import java.util.Optional;
public class SpringSecurityAuditorAware implements AuditorAware<String> {
public SpringSecurityAuditorAware() {
// TODO Auto-generated constructor stub
}
public String getCurrentAuditor() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication == null || !authentication.isAuthenticated()) {
return null;
}
return ((JwtUser) authentication.getPrincipal()).getUsername();
}
}
package com.sh.crm.general;
public enum Errors {
SUCCESSFUL("0", "SUCCESSFUL RESPONSE"),
GENERAL_ERROR("-1", "GENERAL ERROR"),
CANNOT_CREATE_USER("100", "Unable to create user"),
USER_CREATED_ROLES_FAILED("101", "User created but roles failed to be created"),
USER_CREATED_GROUPS_FAILED("102", "User created but groups failed to be created"),
USER_ALREADY_EXISTS("103", "User Already Exists: "),
USER_EDIT_FAILED("104", "Can't modify user"),
USER_NOT_EXISTS("105", "User does not exists"),
USER_NOTALLOWED_TO_CHANGE_SUPERUSER("106", "Super user is mutable "),
USER_DELETE_GROUPS_FAILED("107", "Cannot delete user's groups"),
USER_DELETE_ROLES_FAILED("108", "Cannot delete user's roles"),
USER_ID_CHANGED("109", "Sorry User ID cannot be changed"),
GROUP_CREATE_FAILED("201", "Cannot Create Group"),
GROUP_CREATED_OTHER_FAILED("202", "Group Created but Other Transaction Failed"),
GROUP_EDIT_FAILED("203", "Cannot Edit Group"),
GROUP_EDIT_OTHER_FAILED("204", "Group Edited but Other Transaction Failed"),
GROUP_NOT_EXISTS("205", "GROUP does not exists"),
ROLE_CREATE_FAILED("206", "Cannot Create Role"),
ROLE_CREATED_OTHER_FAILED("207", "ROLE Created but Other Transaction Failed"),
ROLE_EDIT_FAILED("208", "Cannot Edit ROLE");
private String code;
private String desc;
Errors(String code, String desc) {
this.code = code;
this.desc = desc;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
package com.sh.crm.general.exceptions;
public abstract class BasicException extends Exception {
protected String errorCode;
public BasicException(String errorCode, String message) {
super(message);
this.errorCode = errorCode;
}
public BasicException() {
super("");
}
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
}
package com.sh.crm.general.exceptions;
import com.sh.crm.general.Errors;
public class GeneralException extends BasicException {
public GeneralException(String errorCode, String message) {
super(errorCode, message);
}
public GeneralException(Errors error) {
super(error.getCode(), error.getDesc());
}
public GeneralException(Errors error, Throwable e) {
super(error.getCode(), error.getDesc() + "\n Throwable " + e.getMessage());
}
public GeneralException(Errors error, String msg) {
super(error.getCode(), error.getDesc() + "\n Message " + msg);
}
}
package com.sh.crm.general.holders;
import com.sh.crm.jpa.entities.Groups;
import com.sh.crm.jpa.entities.Roles;
import com.sh.crm.jpa.entities.Users;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Arrays;
import java.util.List;
/**
* Created by achah on 10/13/2017.
*/
public class GroupHolder {
@NotNull
@Size(min = 3, max = 50)
private String name;
private Integer id;
private List<Roles> roles;
private List<Users> users;
private Groups group;
public GroupHolder() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public List<Roles> getRoles() {
return roles;
}
public void setRoles(List<Roles> roles) {
this.roles = roles;
}
public List<Users> getUsers() {
return users;
}
public void setUsers(List<Users> users) {
this.users = users;
}
public Groups getGroup() {
return group;
}
public void setGroup(Groups group) {
this.group = group;
}
@Override
public String toString() {
return "GroupHolder{" +
"name='" + name + '\'' +
", id=" + id +
", roles=" + roles +
", users=" + users +
", group=" + group +
'}';
}
}
package com.sh.crm.general.holders;
import com.sh.crm.jpa.entities.Permissions;
import com.sh.crm.jpa.entities.Roles;
import java.util.List;
public class RoleHolder {
private Roles role;
private List<Permissions> permissions;
public RoleHolder(){
}
public Roles getRole() {
return role;
}
public void setRole(Roles role) {
this.role = role;
}
public List<Permissions> getPermissions() {
return permissions;
}
public void setPermissions(List<Permissions> permissions) {
this.permissions = permissions;
}
}
package com.sh.crm.general.holders;
import com.sh.crm.jpa.entities.Users;
import javax.validation.constraints.NotNull;
import java.util.List;
public class UserHolder {
@NotNull
private Users user;
private String password;
private List<Integer> selectedGroups;
private List<Integer> selectedRoles;
public Users getUser() {
return user;
}
public void setUser(Users user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public List<Integer> getSelectedGroups() {
return selectedGroups;
}
public void setSelectedGroups(List<Integer> selectedGroups) {
this.selectedGroups = selectedGroups;
}
public List<Integer> getSelectedRoles() {
return selectedRoles;
}
public void setSelectedRoles(List<Integer> selectedRoles) {
this.selectedRoles = selectedRoles;
}
@Override
public String toString() {
return "UserHolder{" +
"user=" + user +
", password='" + password + '\'' +
", selectedGroups=" + selectedGroups +
", selectedRoles=" + selectedRoles +
'}';
}
}
package com.sh.crm.general.utils;
import org.slf4j.Logger;
import java.io.PrintWriter;
import java.io.StringWriter;
public class LoggingUtils {
public static void logStackTrace(Logger logger, Throwable cause, String level) {
if (logger != null && level != null && cause != null) {
StringWriter stringWriter = new StringWriter();
cause.printStackTrace(new PrintWriter(stringWriter, true));
level = level.toLowerCase();
switch (level) {
case "debug":
if (logger.isDebugEnabled()) {
logger.debug("Exception Thrown, Cause : {}", stringWriter.toString());
}
break;
case "info":
if (logger.isInfoEnabled()) {
logger.info("Exception Thrown, Cause : {}", stringWriter.toString());
}
break;
case "trace":
if (logger.isTraceEnabled()) {
logger.trace("Exception Thrown, Cause : {}", stringWriter.toString());
}
break;
case "error":
logger.error("Exception Thrown, Cause : {}", stringWriter.toString());
break;
default:
return;
}
stringWriter = null;
level = null;
cause = null;
}
}
}
package com.sh.crm.general.utils;
import com.sh.crm.security.model.JwtUser;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import java.util.Calendar;
import java.util.Optional;
public class Utils {
public static Optional<JwtUser> currentUser() {
Authentication auth = SecurityContextHolder
.getContext().getAuthentication();
if (auth != null) {
Object principal = auth.getPrincipal();
if (principal instanceof JwtUser)
return Optional.of((JwtUser) principal);
}
return Optional.empty();
}
public static String getUserName() {
return currentUser().get().getUsername();
}
public static Calendar getDateShiftedMonths(int months) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, months);
return cal;
}
public static String getLikeClauseValue(String value) {
if (value != null) {
value = "%" + value + "%";
}
return value;
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import java.math.BigInteger;
/**
* @author achah
*/
@Entity
@Table(name = "assignedtickets")
@XmlRootElement
public class Assignedtickets extends BasicModelWithID {
@Column(name = "ticketID")
private BigInteger ticketID;
@Size(max = 50)
@Column(name = "userID")
private String userID;
@Column(name = "Enabled")
private Integer enabled;
public Assignedtickets() {
}
public Assignedtickets(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public BigInteger getTicketID() {
return ticketID;
}
public void setTicketID(BigInteger ticketID) {
this.ticketID = ticketID;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public Integer getEnabled() {
return enabled;
}
public void setEnabled(Integer enabled) {
this.enabled = enabled;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Assignedtickets)) {
return false;
}
Assignedtickets other = (Assignedtickets) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Assignedtickets[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;
/**
* @author achah
*/
@Entity
@Table(name = "attachments")
@XmlRootElement
public class Attachments extends BasicModelWithID {
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 500)
@Column(name = "FileName")
private String fileName;
@Size(max = 500)
@Column(name = "FileType")
private String fileType;
@Size(max = 50)
@Column(name = "Hash")
private String hash;
@Lob
@Column(name = "RAWContent")
private byte[] rAWContent;
@Size(max = 500)
@Column(name = "FilePath")
private String filePath;
public Attachments() {
}
public Attachments(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getFileType() {
return fileType;
}
public void setFileType(String fileType) {
this.fileType = fileType;
}
public String getHash() {
return hash;
}
public void setHash(String hash) {
this.hash = hash;
}
public byte[] getRAWContent() {
return rAWContent;
}
public void setRAWContent(byte[] rAWContent) {
this.rAWContent = rAWContent;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Attachments)) {
return false;
}
Attachments other = (Attachments) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Attachments[ id=" + id + " ]";
}
}
package com.sh.crm.jpa.entities;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.util.Date;
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BasicModel {
@Column(name = "CreatedBy")
@CreatedBy
protected String createdBy;
@Column(name = "ModificationDate")
@Temporal(TemporalType.TIMESTAMP)
@LastModifiedDate
protected Date modificationDate;
@Column(name = "ModifiedBy")
@LastModifiedBy
protected String modifiedBy;
@CreatedDate
@Column(name = "CreationDate")
protected Date creationDate;
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public Date getModificationDate() {
return modificationDate;
}
public void setModificationDate(Date modificationDate) {
this.modificationDate = modificationDate;
}
public String getModifiedBy() {
return modifiedBy;
}
public void setModifiedBy(String modifiedBy) {
this.modifiedBy = modifiedBy;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
}
package com.sh.crm.jpa.entities;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.util.Date;
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BasicModelWithID extends BasicModel{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
protected Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
package com.sh.crm.jpa.entities;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BasicModelWithIDInt extends BasicModel{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
protected Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
/**
*
* @author achah
*/
@Entity
@Table(name = "calendar")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Calendar.findAll", query = "SELECT c FROM Calendar c")})
public class Calendar implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "dt")
@Temporal(TemporalType.TIMESTAMP)
private Date dt;
@Column(name = "isWeekday")
private Short isWeekday;
@Column(name = "isHoliday")
private Short isHoliday;
@Column(name = "Y")
private Short y;
@Column(name = "FY")
private Short fy;
@Column(name = "Q")
private Short q;
@Column(name = "M")
private Short m;
@Column(name = "D")
private Short d;
@Column(name = "DW")
private Short dw;
@Size(max = 9)
@Column(name = "monthname")
private String monthname;
@Size(max = 9)
@Column(name = "dayname")
private String dayname;
@Column(name = "W")
private Short w;
@Size(max = 150)
@Column(name = "Description")
private String description;
public Calendar() {
}
public Calendar(Date dt) {
this.dt = dt;
}
public Date getDt() {
return dt;
}
public void setDt(Date dt) {
this.dt = dt;
}
public Short getIsWeekday() {
return isWeekday;
}
public void setIsWeekday(Short isWeekday) {
this.isWeekday = isWeekday;
}
public Short getIsHoliday() {
return isHoliday;
}
public void setIsHoliday(Short isHoliday) {
this.isHoliday = isHoliday;
}
public Short getY() {
return y;
}
public void setY(Short y) {
this.y = y;
}
public Short getFy() {
return fy;
}
public void setFy(Short fy) {
this.fy = fy;
}
public Short getQ() {
return q;
}
public void setQ(Short q) {
this.q = q;
}
public Short getM() {
return m;
}
public void setM(Short m) {
this.m = m;
}
public Short getD() {
return d;
}
public void setD(Short d) {
this.d = d;
}
public Short getDw() {
return dw;
}
public void setDw(Short dw) {
this.dw = dw;
}
public String getMonthname() {
return monthname;
}
public void setMonthname(String monthname) {
this.monthname = monthname;
}
public String getDayname() {
return dayname;
}
public void setDayname(String dayname) {
this.dayname = dayname;
}
public Short getW() {
return w;
}
public void setW(Short w) {
this.w = w;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public int hashCode() {
int hash = 0;
hash += (dt != null ? dt.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Calendar)) {
return false;
}
Calendar other = (Calendar) object;
if ((this.dt == null && other.dt != null) || (this.dt != null && !this.dt.equals(other.dt))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Calendar[ dt=" + dt + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
/**
*
* @author achah
*/
@Entity
@Table(name = "countrycode")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Countrycode.findAll", query = "SELECT c FROM Countrycode c")})
public class Countrycode implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "ID")
private Integer id;
@Size(max = 255)
@Column(name = "CountryName")
private String countryName;
@Size(max = 255)
@Column(name = "ISO2")
private String iso2;
@Size(max = 255)
@Column(name = "ISO3")
private String iso3;
@Size(max = 255)
@Column(name = "TopLevelDomain")
private String topLevelDomain;
@Size(max = 255)
@Column(name = "FIPS")
private String fips;
// @Max(value=?) @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
@Column(name = "ISONumeric")
private Double iSONumeric;
@Column(name = "GeoNameID")
private Double geoNameID;
@Column(name = "E164")
private Double e164;
@Size(max = 255)
@Column(name = "PhoneCode")
private String phoneCode;
@Size(max = 255)
@Column(name = "Continent")
private String continent;
@Size(max = 255)
@Column(name = "Capital")
private String capital;
@Size(max = 255)
@Column(name = "TimeZoneinCapital")
private String timeZoneinCapital;
@Size(max = 255)
@Column(name = "Currency")
private String currency;
@Size(max = 255)
@Column(name = "LanguageCodes")
private String languageCodes;
@Size(max = 255)
@Column(name = "Languages")
private String languages;
@Column(name = "AreaKM2")
private Double areaKM2;
@Column(name = "InternetHosts")
private Double internetHosts;
@Column(name = "InternetUsers")
private Double internetUsers;
@Column(name = "Mobile")
private Double mobile;
@Column(name = "Landline")
private Double landline;
@Column(name = "GDP")
private Double gdp;
@Column(name = "MobileLength")
private Integer mobileLength;
@Column(name = "Enabled")
private Short enabled;
public Countrycode() {
}
public Countrycode(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCountryName() {
return countryName;
}
public void setCountryName(String countryName) {
this.countryName = countryName;
}
public String getIso2() {
return iso2;
}
public void setIso2(String iso2) {
this.iso2 = iso2;
}
public String getIso3() {
return iso3;
}
public void setIso3(String iso3) {
this.iso3 = iso3;
}
public String getTopLevelDomain() {
return topLevelDomain;
}
public void setTopLevelDomain(String topLevelDomain) {
this.topLevelDomain = topLevelDomain;
}
public String getFips() {
return fips;
}
public void setFips(String fips) {
this.fips = fips;
}
public Double getISONumeric() {
return iSONumeric;
}
public void setISONumeric(Double iSONumeric) {
this.iSONumeric = iSONumeric;
}
public Double getGeoNameID() {
return geoNameID;
}
public void setGeoNameID(Double geoNameID) {
this.geoNameID = geoNameID;
}
public Double getE164() {
return e164;
}
public void setE164(Double e164) {
this.e164 = e164;
}
public String getPhoneCode() {
return phoneCode;
}
public void setPhoneCode(String phoneCode) {
this.phoneCode = phoneCode;
}
public String getContinent() {
return continent;
}
public void setContinent(String continent) {
this.continent = continent;
}
public String getCapital() {
return capital;
}
public void setCapital(String capital) {
this.capital = capital;
}
public String getTimeZoneinCapital() {
return timeZoneinCapital;
}
public void setTimeZoneinCapital(String timeZoneinCapital) {
this.timeZoneinCapital = timeZoneinCapital;
}
public String getCurrency() {
return currency;
}
public void setCurrency(String currency) {
this.currency = currency;
}
public String getLanguageCodes() {
return languageCodes;
}
public void setLanguageCodes(String languageCodes) {
this.languageCodes = languageCodes;
}
public String getLanguages() {
return languages;
}
public void setLanguages(String languages) {
this.languages = languages;
}
public Double getAreaKM2() {
return areaKM2;
}
public void setAreaKM2(Double areaKM2) {
this.areaKM2 = areaKM2;
}
public Double getInternetHosts() {
return internetHosts;
}
public void setInternetHosts(Double internetHosts) {
this.internetHosts = internetHosts;
}
public Double getInternetUsers() {
return internetUsers;
}
public void setInternetUsers(Double internetUsers) {
this.internetUsers = internetUsers;
}
public Double getMobile() {
return mobile;
}
public void setMobile(Double mobile) {
this.mobile = mobile;
}
public Double getLandline() {
return landline;
}
public void setLandline(Double landline) {
this.landline = landline;
}
public Double getGdp() {
return gdp;
}
public void setGdp(Double gdp) {
this.gdp = gdp;
}
public Integer getMobileLength() {
return mobileLength;
}
public void setMobileLength(Integer mobileLength) {
this.mobileLength = mobileLength;
}
public Short getEnabled() {
return enabled;
}
public void setEnabled(Short enabled) {
this.enabled = enabled;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Countrycode)) {
return false;
}
Countrycode other = (Countrycode) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Countrycode[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;
/**
* @author achah
*/
@Entity
@Table(name = "emailhistory")
@XmlRootElement
public class Emailhistory {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Basic(optional = false)
@NotNull
@Column(name = "TicketID")
private long ticketID;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 250)
@Column(name = "EmailID")
private String emailID;
@Size(max = 2147483647)
@Column(name = "CopyTo")
private String copyTo;
@Size(max = 2147483647)
@Column(name = "BCopyTo")
private String bCopyTo;
@Column(name = "CreationDate")
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@Column(name = "SendDate")
@Temporal(TemporalType.TIMESTAMP)
private Date sendDate;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 120)
@Column(name = "SendingOn")
private String sendingOn;
@Column(name = "Status")
private Integer status;
@Size(max = 50)
@Column(name = "Type")
private String type;
@Size(max = 2147483647)
@Column(name = "Result")
private String result;
@Column(name = "ReadStatus")
private Short readStatus;
@Column(name = "DeleteStatus")
private Short deleteStatus;
@JoinColumn(name = "EmailMessage", referencedColumnName = "Id")
@ManyToOne(fetch = FetchType.LAZY)
private Emailmessage emailMessage;
public Emailhistory() {
}
public Emailhistory(Long id) {
this.id = id;
}
public Emailhistory(Long id, long ticketID, String emailID, String sendingOn) {
this.id = id;
this.ticketID = ticketID;
this.emailID = emailID;
this.sendingOn = sendingOn;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public long getTicketID() {
return ticketID;
}
public void setTicketID(long ticketID) {
this.ticketID = ticketID;
}
public String getEmailID() {
return emailID;
}
public void setEmailID(String emailID) {
this.emailID = emailID;
}
public String getCopyTo() {
return copyTo;
}
public void setCopyTo(String copyTo) {
this.copyTo = copyTo;
}
public String getBCopyTo() {
return bCopyTo;
}
public void setBCopyTo(String bCopyTo) {
this.bCopyTo = bCopyTo;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getSendDate() {
return sendDate;
}
public void setSendDate(Date sendDate) {
this.sendDate = sendDate;
}
public String getSendingOn() {
return sendingOn;
}
public void setSendingOn(String sendingOn) {
this.sendingOn = sendingOn;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public Short getReadStatus() {
return readStatus;
}
public void setReadStatus(Short readStatus) {
this.readStatus = readStatus;
}
public Short getDeleteStatus() {
return deleteStatus;
}
public void setDeleteStatus(Short deleteStatus) {
this.deleteStatus = deleteStatus;
}
public Emailmessage getEmailMessage() {
return emailMessage;
}
public void setEmailMessage(Emailmessage emailMessage) {
this.emailMessage = emailMessage;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Emailhistory)) {
return false;
}
Emailhistory other = (Emailhistory) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Emailhistory[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import java.io.Serializable;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
/**
*
* @author achah
*/
@Entity
@Table(name = "emailmessage")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Emailmessage.findAll", query = "SELECT e FROM Emailmessage e")})
public class Emailmessage implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "Id")
private Long id;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 500)
@Column(name = "EmailTitle")
private String emailTitle;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 2147483647)
@Column(name = "EmailMessage")
private String emailMessage;
@OneToMany(mappedBy = "emailMessage", fetch = FetchType.LAZY)
private List<Emailhistory> emailhistoryList;
public Emailmessage() {
}
public Emailmessage(Long id) {
this.id = id;
}
public Emailmessage(Long id, String emailTitle, String emailMessage) {
this.id = id;
this.emailTitle = emailTitle;
this.emailMessage = emailMessage;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getEmailTitle() {
return emailTitle;
}
public void setEmailTitle(String emailTitle) {
this.emailTitle = emailTitle;
}
public String getEmailMessage() {
return emailMessage;
}
public void setEmailMessage(String emailMessage) {
this.emailMessage = emailMessage;
}
@XmlTransient
public List<Emailhistory> getEmailhistoryList() {
return emailhistoryList;
}
public void setEmailhistoryList(List<Emailhistory> emailhistoryList) {
this.emailhistoryList = emailhistoryList;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Emailmessage)) {
return false;
}
Emailmessage other = (Emailmessage) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Emailmessage[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
/**
* @author achah
*/
@Entity
@Table(name = "emailtemplates")
@XmlRootElement
public class Emailtemplates extends BasicModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "TemplateID")
private Integer templateID;
@Size(max = 150)
@Column(name = "TemplateName")
private String templateName;
@Size(max = 2147483647)
@Column(name = "TemplateData")
private String templateData;
@Column(name = "enabled")
private Boolean enabled;
public Emailtemplates() {
}
public Emailtemplates(Integer templateID) {
this.templateID = templateID;
}
public Integer getTemplateID() {
return templateID;
}
public void setTemplateID(Integer templateID) {
this.templateID = templateID;
}
public String getTemplateName() {
return templateName;
}
public void setTemplateName(String templateName) {
this.templateName = templateName;
}
public String getTemplateData() {
return templateData;
}
public void setTemplateData(String templateData) {
this.templateData = templateData;
}
public Boolean getEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
@Override
public int hashCode() {
int hash = 0;
hash += (templateID != null ? templateID.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Emailtemplates)) {
return false;
}
Emailtemplates other = (Emailtemplates) object;
if ((this.templateID == null && other.templateID != null) || (this.templateID != null && !this.templateID.equals(other.templateID))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Emailtemplates[ templateID=" + templateID + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;
/**
* @author achah
*/
@Entity
@Table(name = "escalationhistory")
@XmlRootElement
public class Escalationhistory {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
@Column(name = "ID")
private Long id;
@Basic(optional = false)
@NotNull
@Column(name = "ESCLevel")
private int eSCLevel;
@Basic(optional = false)
@NotNull
@Column(name = "ESCDateTime")
@Temporal(TemporalType.TIMESTAMP)
private Date eSCDateTime;
@Size(max = 2147483647)
@Column(name = "EscUsers")
private String escUsers;
@Size(max = 2147483647)
@Column(name = "EscEmails")
private String escEmails;
@JoinColumn(name = "SLA", referencedColumnName = "ID")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Sla sla;
@JoinColumn(name = "TicketID", referencedColumnName = "ID")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Ticket ticketID;
public Escalationhistory() {
}
public Escalationhistory(Long id) {
this.id = id;
}
public Escalationhistory(Long id, int eSCLevel, Date eSCDateTime) {
this.id = id;
this.eSCLevel = eSCLevel;
this.eSCDateTime = eSCDateTime;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public int getESCLevel() {
return eSCLevel;
}
public void setESCLevel(int eSCLevel) {
this.eSCLevel = eSCLevel;
}
public Date getESCDateTime() {
return eSCDateTime;
}
public void setESCDateTime(Date eSCDateTime) {
this.eSCDateTime = eSCDateTime;
}
public String getEscUsers() {
return escUsers;
}
public void setEscUsers(String escUsers) {
this.escUsers = escUsers;
}
public String getEscEmails() {
return escEmails;
}
public void setEscEmails(String escEmails) {
this.escEmails = escEmails;
}
public Sla getSla() {
return sla;
}
public void setSla(Sla sla) {
this.sla = sla;
}
public Ticket getTicketID() {
return ticketID;
}
public void setTicketID(Ticket ticketID) {
this.ticketID = ticketID;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Escalationhistory)) {
return false;
}
Escalationhistory other = (Escalationhistory) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Escalationhistory[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
/**
* @author achah
*/
@Entity
@Table(name = "globalconfiguration")
@XmlRootElement
public class Globalconfiguration {
@Id
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "Property")
private String property;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 1073741823)
@Column(name = "Value")
private String value;
@Size(max = 50)
@Column(name = "type")
private String type;
public Globalconfiguration() {
}
public Globalconfiguration(String property) {
this.property = property;
}
public Globalconfiguration(String property, String value) {
this.property = property;
this.value = value;
}
public String getProperty() {
return property;
}
public void setProperty(String property) {
this.property = property;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public int hashCode() {
int hash = 0;
hash += (property != null ? property.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Globalconfiguration)) {
return false;
}
Globalconfiguration other = (Globalconfiguration) object;
if ((this.property == null && other.property != null) || (this.property != null && !this.property.equals(other.property))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Globalconfiguration[ property=" + property + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;
/**
* @author achah
*/
@Entity
@Table(name = "grouproles")
@XmlRootElement
public class Grouproles {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Integer id;
@JoinColumn(name = "groupID")
@ManyToOne
private Groups groupID;
@ManyToOne
@JoinColumn(name = "roleID")
private Roles roleID;
@CreatedDate
@Column(name = "CreationDate")
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@CreatedBy
@Column(name = "CreatedBy")
private String createdBy;
public Grouproles() {
}
public Grouproles(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Groups getGroupID() {
return groupID;
}
public void setGroupID(Groups groupID) {
this.groupID = groupID;
}
public Roles getRoleID() {
return roleID;
}
public void setRoleID(Roles roleID) {
this.roleID = roleID;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Grouproles)) {
return false;
}
Grouproles other = (Grouproles) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Grouproles[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
/**
* @author achah
*/
@Entity
@Table(name = "groups")
@XmlRootElement
public class Groups extends BasicModelWithIDInt {
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "GroupName")
private String groupName;
@Basic(optional = false)
@NotNull
@Column(name = "Enabled")
private Boolean enabled;
public Groups() {
}
public Groups(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public Boolean getEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Groups)) {
return false;
}
Groups other = (Groups) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Groups[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
/**
* @author achah
*/
@Entity
@Table(name = "holdreason")
@XmlRootElement
public class Holdreason extends BasicModel {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ReasonID")
private Integer reasonID;
@Column(name = "SortOrder")
private Integer sortOrder;
@Size(max = 150)
@Column(name = "ArabicLabel")
private String arabicLabel;
@Size(max = 150)
@Column(name = "EnglishLabel")
private String englishLabel;
@Column(name = "HoldTime")
private Integer holdTime;
@Column(name = "Flexible")
private Boolean flexible;
public Holdreason() {
}
public Holdreason(Integer reasonID) {
this.reasonID = reasonID;
}
public Integer getReasonID() {
return reasonID;
}
public void setReasonID(Integer reasonID) {
this.reasonID = reasonID;
}
public Integer getSortOrder() {
return sortOrder;
}
public void setSortOrder(Integer sortOrder) {
this.sortOrder = sortOrder;
}
public String getArabicLabel() {
return arabicLabel;
}
public void setArabicLabel(String arabicLabel) {
this.arabicLabel = arabicLabel;
}
public String getEnglishLabel() {
return englishLabel;
}
public void setEnglishLabel(String englishLabel) {
this.englishLabel = englishLabel;
}
public Integer getHoldTime() {
return holdTime;
}
public void setHoldTime(Integer holdTime) {
this.holdTime = holdTime;
}
public Boolean getFlexible() {
return flexible;
}
public void setFlexible(Boolean flexible) {
this.flexible = flexible;
}
@Override
public int hashCode() {
int hash = 0;
hash += (reasonID != null ? reasonID.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Holdreason)) {
return false;
}
Holdreason other = (Holdreason) object;
if ((this.reasonID == null && other.reasonID != null) || (this.reasonID != null && !this.reasonID.equals(other.reasonID))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Holdreason[ reasonID=" + reasonID + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import java.util.Date;
import java.util.List;
/**
* @author achah
*/
@Entity
@Table(name = "holidays")
@XmlRootElement
public class Holidays extends BasicModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "HolidayID")
private Integer holidayID;
@Size(max = 250)
@Column(name = "HolidayName")
private String holidayName;
@Basic(optional = false)
@NotNull
@Column(name = "StartDate")
@Temporal(TemporalType.DATE)
private Date startDate;
@Basic(optional = false)
@NotNull
@Column(name = "EndData")
@Temporal(TemporalType.DATE)
private Date endData;
@Basic(optional = false)
@NotNull
@Column(name = "Enabled")
private Boolean enabled;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "holidayID", fetch = FetchType.LAZY)
private List<Maincatholidays> maincatholidaysList;
public Holidays() {
}
public Holidays(Integer holidayID) {
this.holidayID = holidayID;
}
public Integer getHolidayID() {
return holidayID;
}
public void setHolidayID(Integer holidayID) {
this.holidayID = holidayID;
}
public String getHolidayName() {
return holidayName;
}
public void setHolidayName(String holidayName) {
this.holidayName = holidayName;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public Date getEndData() {
return endData;
}
public void setEndData(Date endData) {
this.endData = endData;
}
public Boolean getEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
@XmlTransient
public List<Maincatholidays> getMaincatholidaysList() {
return maincatholidaysList;
}
public void setMaincatholidaysList(List<Maincatholidays> maincatholidaysList) {
this.maincatholidaysList = maincatholidaysList;
}
@Override
public int hashCode() {
int hash = 0;
hash += (holidayID != null ? holidayID.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Holidays)) {
return false;
}
Holidays other = (Holidays) object;
if ((this.holidayID == null && other.holidayID != null) || (this.holidayID != null && !this.holidayID.equals(other.holidayID))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Holidays[ holidayID=" + holidayID + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;
/**
* @author achah
*/
@Entity
@Table(name = "logindetails")
@XmlRootElement
public class Logindetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "UserID")
private String userID;
@Basic(optional = false)
@NotNull
@Column(name = "DateTime")
@Temporal(TemporalType.TIMESTAMP)
private Date dateTime;
@Basic(optional = false)
@NotNull
@Column(name = "Result")
private short result;
@Size(max = 20)
@Column(name = "IPAddress")
private String iPAddress;
@Column(name = "LogoutDateTime")
@Temporal(TemporalType.TIMESTAMP)
private Date logoutDateTime;
@Size(max = 500)
@Column(name = "Token")
private String token;
@Size(max = 100)
@Column(name = "LogoutReason")
private String logoutReason;
public Logindetails() {
}
public Logindetails(Long id) {
this.id = id;
}
public Logindetails(Long id, String userID, Date dateTime, short result) {
this.id = id;
this.userID = userID;
this.dateTime = dateTime;
this.result = result;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public Date getDateTime() {
return dateTime;
}
public void setDateTime(Date dateTime) {
this.dateTime = dateTime;
}
public short getResult() {
return result;
}
public void setResult(short result) {
this.result = result;
}
public String getIPAddress() {
return iPAddress;
}
public void setIPAddress(String iPAddress) {
this.iPAddress = iPAddress;
}
public Date getLogoutDateTime() {
return logoutDateTime;
}
public void setLogoutDateTime(Date logoutDateTime) {
this.logoutDateTime = logoutDateTime;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getLogoutReason() {
return logoutReason;
}
public void setLogoutReason(String logoutReason) {
this.logoutReason = logoutReason;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Logindetails)) {
return false;
}
Logindetails other = (Logindetails) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Logindetails[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import java.util.List;
/**
* @author achah
*/
@Entity
@Table(name = "maincategory")
@XmlRootElement
public class Maincategory extends BasicModelWithIDInt {
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 150)
@Column(name = "ArabicLabel")
private String arabicLabel;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 150)
@Column(name = "EnglishLabel")
private String englishLabel;
@Column(name = "Enabled")
private Boolean enabled;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "mainCategory", fetch = FetchType.LAZY)
private List<Maincatholidays> maincatholidaysList;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "mainCategory", fetch = FetchType.LAZY)
private List<Subcategory> subcategoryList;
public Maincategory() {
}
public Maincategory(Integer id) {
this.id = id;
}
public Maincategory(Integer id, String arabicLabel, String englishLabel) {
this.id = id;
this.arabicLabel = arabicLabel;
this.englishLabel = englishLabel;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getArabicLabel() {
return arabicLabel;
}
public void setArabicLabel(String arabicLabel) {
this.arabicLabel = arabicLabel;
}
public String getEnglishLabel() {
return englishLabel;
}
public void setEnglishLabel(String englishLabel) {
this.englishLabel = englishLabel;
}
public Boolean getEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
@XmlTransient
public List<Maincatholidays> getMaincatholidaysList() {
return maincatholidaysList;
}
public void setMaincatholidaysList(List<Maincatholidays> maincatholidaysList) {
this.maincatholidaysList = maincatholidaysList;
}
@XmlTransient
public List<Subcategory> getSubcategoryList() {
return subcategoryList;
}
public void setSubcategoryList(List<Subcategory> subcategoryList) {
this.subcategoryList = subcategoryList;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Maincategory)) {
return false;
}
Maincategory other = (Maincategory) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Maincategory[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlRootElement;
/**
* @author achah
*/
@Entity
@Table(name = "maincatholidays")
@XmlRootElement
public class Maincatholidays {
// private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "Id")
private Integer id;
@JoinColumn(name = "HolidayID", referencedColumnName = "HolidayID")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Holidays holidayID;
@JoinColumn(name = "MainCategory", referencedColumnName = "ID")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Maincategory mainCategory;
public Maincatholidays() {
}
public Maincatholidays(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Holidays getHolidayID() {
return holidayID;
}
public void setHolidayID(Holidays holidayID) {
this.holidayID = holidayID;
}
public Maincategory getMainCategory() {
return mainCategory;
}
public void setMainCategory(Maincategory mainCategory) {
this.mainCategory = mainCategory;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Maincatholidays)) {
return false;
}
Maincatholidays other = (Maincatholidays) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Maincatholidays[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import java.math.BigInteger;
import java.util.Date;
/**
* @author achah
*/
@Entity
@Table(name = "notifications")
@XmlRootElement
public class Notifications {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Basic(optional = false)
@NotNull
@Column(name = "TicketID")
private long ticketID;
@Column(name = "DataID")
private BigInteger dataID;
@Column(name = "Action")
private Integer action;
@Column(name = "CreationDate")
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@Size(max = 50)
@Column(name = "CreatedBy")
private String createdBy;
@Column(name = "Status")
private Short status;
public Notifications() {
}
public Notifications(Long id) {
this.id = id;
}
public Notifications(Long id, long ticketID) {
this.id = id;
this.ticketID = ticketID;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public long getTicketID() {
return ticketID;
}
public void setTicketID(long ticketID) {
this.ticketID = ticketID;
}
public BigInteger getDataID() {
return dataID;
}
public void setDataID(BigInteger dataID) {
this.dataID = dataID;
}
public Integer getAction() {
return action;
}
public void setAction(Integer action) {
this.action = action;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public Short getStatus() {
return status;
}
public void setStatus(Short status) {
this.status = status;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Notifications)) {
return false;
}
Notifications other = (Notifications) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Notifications[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import org.hibernate.envers.Audited;
import javax.persistence.*;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
/**
* @author achah
*/
@Entity
@Audited
@Table(name = "permissions")
@XmlRootElement
@NamedStoredProcedureQueries({
@NamedStoredProcedureQuery(
name = "GetPermissions",
procedureName = "dbo.GetUserPermissions",
resultClasses = {Permissions.class},
parameters = {
@StoredProcedureParameter(
type = Integer.class,
mode = ParameterMode.IN)
})
})
public class Permissions {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Integer id;
@Size(max = 50)
@Column(name = "Permission")
private String permission;
@Size(max = 50)
@Column(name = "ModuleName")
private String moduleName;
@Size(max = 50)
@Column(name = "GroupName")
private String groupName;
@Size(max = 150)
@Column(name = "Description")
private String description;
public Permissions() {
}
public Permissions(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getPermission() {
return permission;
}
public void setPermission(String permission) {
this.permission = permission;
}
public String getModuleName() {
return moduleName;
}
public void setModuleName(String moduleName) {
this.moduleName = moduleName;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Permissions)) {
return false;
}
Permissions other = (Permissions) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Permissions[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import javax.persistence.*;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;
/**
* @author achah
*/
@Entity
@Table(name = "rolepermissions")
@XmlRootElement
public class Rolepermissions {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Integer id;
@ManyToOne
@JoinColumn(name = "roleID")
private Roles roleID;
@ManyToOne
@JoinColumn(name = "permissionID")
private Permissions permissionID;
@Basic(optional = false)
@CreatedDate
@Column(name = "CreationDate")
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@Basic(optional = false)
@CreatedBy
@Size(min = 1, max = 50)
@Column(name = "CreatedBy")
private String createdBy;
public Rolepermissions() {
}
public Rolepermissions(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Roles getRoleID() {
return roleID;
}
public void setRoleID(Roles roleID) {
this.roleID = roleID;
}
public Permissions getPermissionID() {
return permissionID;
}
public void setPermissionID(Permissions permissionID) {
this.permissionID = permissionID;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
if (!(object instanceof Rolepermissions)) {
return false;
}
Rolepermissions other = (Rolepermissions) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
/**
* @author achah
*/
@Entity
@Table(name = "roles")
@XmlRootElement
public class Roles extends BasicModelWithIDInt {
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "Role")
private String role;
public Roles() {
}
public Roles(Integer id) {
this.id = id;
}
public Roles(Integer id, String role) {
this.id = id;
this.role = role;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Roles)) {
return false;
}
Roles other = (Roles) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Roles[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
/**
*
* @author achah
*/
@Entity
@Table(name = "sla")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Sla.findAll", query = "SELECT s FROM Sla s")})
public class Sla implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "ID")
private Integer id;
@Basic(optional = false)
@NotNull
@Column(name = "Time")
private int time;
@Column(name = "CreationDate")
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@Size(max = 50)
@Column(name = "CreatedBy")
private String createdBy;
@Size(max = 50)
@Column(name = "ModifiedBy")
private String modifiedBy;
@Column(name = "ModificationDate")
@Temporal(TemporalType.TIMESTAMP)
private Date modificationDate;
@Size(max = 50)
@Column(name = "SLAName")
private String sLAName;
@Column(name = "CatID")
private Integer catID;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "slaid", fetch = FetchType.LAZY)
private List<Topicsla> topicslaList;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "sla", fetch = FetchType.LAZY)
private List<Escalationhistory> escalationhistoryList;
public Sla() {
}
public Sla(Integer id) {
this.id = id;
}
public Sla(Integer id, int time) {
this.id = id;
this.time = time;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public int getTime() {
return time;
}
public void setTime(int time) {
this.time = time;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public String getModifiedBy() {
return modifiedBy;
}
public void setModifiedBy(String modifiedBy) {
this.modifiedBy = modifiedBy;
}
public Date getModificationDate() {
return modificationDate;
}
public void setModificationDate(Date modificationDate) {
this.modificationDate = modificationDate;
}
public String getSLAName() {
return sLAName;
}
public void setSLAName(String sLAName) {
this.sLAName = sLAName;
}
public Integer getCatID() {
return catID;
}
public void setCatID(Integer catID) {
this.catID = catID;
}
@XmlTransient
public List<Topicsla> getTopicslaList() {
return topicslaList;
}
public void setTopicslaList(List<Topicsla> topicslaList) {
this.topicslaList = topicslaList;
}
@XmlTransient
public List<Escalationhistory> getEscalationhistoryList() {
return escalationhistoryList;
}
public void setEscalationhistoryList(List<Escalationhistory> escalationhistoryList) {
this.escalationhistoryList = escalationhistoryList;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Sla)) {
return false;
}
Sla other = (Sla) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Sla[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
import java.util.Date;
/**
* @author achah
*/
@Entity
@Table(name = "slausers")
@XmlRootElement
public class Slausers extends BasicModelWithID{
@Size(max = 50)
@Column(name = "UserId")
private String userId;
@Basic(optional = false)
@NotNull
@Column(name = "Sla")
private int sla;
@Basic(optional = false)
@NotNull
@Column(name = "Enabled")
private Boolean enabled;
@Size(max = 2147483647)
@Column(name = "Emails")
private String emails;
@Size(max = 2147483647)
@Column(name = "MobileNumbers")
private String mobileNumbers;
public Slausers() {
}
public Slausers(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public int getSla() {
return sla;
}
public void setSla(int sla) {
this.sla = sla;
}
public Boolean getEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
public String getEmails() {
return emails;
}
public void setEmails(String emails) {
this.emails = emails;
}
public String getMobileNumbers() {
return mobileNumbers;
}
public void setMobileNumbers(String mobileNumbers) {
this.mobileNumbers = mobileNumbers;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Slausers)) {
return false;
}
Slausers other = (Slausers) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Slausers[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;
/**
* @author achah
*/
@Entity
@Table(name = "smsHistory")
@XmlRootElement
public class SmsHistory {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 20)
@Column(name = "Mobile")
private String mobile;
@Basic(optional = false)
@NotNull
@Column(name = "CreationDate")
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 2147483647)
@Column(name = "Message")
private String message;
@Column(name = "TemplateID")
private Integer templateID;
@Basic(optional = false)
@NotNull
@Column(name = "Status")
private int status;
@Column(name = "SendDate")
@Temporal(TemporalType.TIMESTAMP)
private Date sendDate;
@Size(max = 50)
@Column(name = "SendingON")
private String sendingON;
@Size(max = 2147483647)
@Column(name = "ErrorCode")
private String errorCode;
@Size(max = 50)
@Column(name = "BackEndID")
private String backEndID;
@JoinColumn(name = "TicketID", referencedColumnName = "ID")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Ticket ticketID;
public SmsHistory() {
}
public SmsHistory(Long id) {
this.id = id;
}
public SmsHistory(Long id, String mobile, Date creationDate, String message, int status) {
this.id = id;
this.mobile = mobile;
this.creationDate = creationDate;
this.message = message;
this.status = status;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Integer getTemplateID() {
return templateID;
}
public void setTemplateID(Integer templateID) {
this.templateID = templateID;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public Date getSendDate() {
return sendDate;
}
public void setSendDate(Date sendDate) {
this.sendDate = sendDate;
}
public String getSendingON() {
return sendingON;
}
public void setSendingON(String sendingON) {
this.sendingON = sendingON;
}
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public String getBackEndID() {
return backEndID;
}
public void setBackEndID(String backEndID) {
this.backEndID = backEndID;
}
public Ticket getTicketID() {
return ticketID;
}
public void setTicketID(Ticket ticketID) {
this.ticketID = ticketID;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof SmsHistory)) {
return false;
}
SmsHistory other = (SmsHistory) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.SmsHistory[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
/**
* @author achah
*/
@Entity
@Table(name = "smsTemplate")
@XmlRootElement
public class SmsTemplate extends BasicModelWithIDInt {
@Column(name = "Enabled")
private Boolean enabled;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "TemplateName")
private String templateName;
@Size(max = 700)
@Column(name = "TemplateText")
private String templateText;
public SmsTemplate() {
}
public SmsTemplate(Integer id) {
this.id = id;
}
public SmsTemplate(Integer id, String templateName) {
this.id = id;
this.templateName = templateName;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Boolean getEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
public String getTemplateName() {
return templateName;
}
public void setTemplateName(String templateName) {
this.templateName = templateName;
}
public String getTemplateText() {
return templateText;
}
public void setTemplateText(String templateText) {
this.templateText = templateText;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof SmsTemplate)) {
return false;
}
SmsTemplate other = (SmsTemplate) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.SmsTemplate[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;
/**
* @author achah
*/
@Entity
@Table(name = "sourceChannel")
@XmlRootElement
public class SourceChannel extends BasicModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ChannelID")
private Integer channelID;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 150)
@Column(name = "ArabicLabel")
private String arabicLabel;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 150)
@Column(name = "EnglishLabel")
private String englishLabel;
@Column(name = "Enabled")
private Boolean enabled;
public SourceChannel() {
}
public SourceChannel(Integer channelID) {
this.channelID = channelID;
}
public SourceChannel(Integer channelID, String arabicLabel, String englishLabel) {
this.channelID = channelID;
this.arabicLabel = arabicLabel;
this.englishLabel = englishLabel;
}
public Integer getChannelID() {
return channelID;
}
public void setChannelID(Integer channelID) {
this.channelID = channelID;
}
public String getArabicLabel() {
return arabicLabel;
}
public void setArabicLabel(String arabicLabel) {
this.arabicLabel = arabicLabel;
}
public String getEnglishLabel() {
return englishLabel;
}
public void setEnglishLabel(String englishLabel) {
this.englishLabel = englishLabel;
}
public Boolean getEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
@Override
public int hashCode() {
int hash = 0;
hash += (channelID != null ? channelID.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof SourceChannel)) {
return false;
}
SourceChannel other = (SourceChannel) object;
if ((this.channelID == null && other.channelID != null) || (this.channelID != null && !this.channelID.equals(other.channelID))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.SourceChannel[ channelID=" + channelID + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
/**
*
* @author achah
*/
@Entity
@Table(name = "status")
@XmlRootElement
public class Status extends BasicModelWithIDInt {
@Column(name = "ListOrder")
private Integer listOrder;
@Column(name = "Enabled")
private Boolean enabled;
@Column(name = "EnableSLA")
private Boolean enableSLA;
@Column(name = "DisplayOnTicketEdit")
private Boolean displayOnTicketEdit;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 150)
@Column(name = "ArabicLabel")
private String arabicLabel;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 150)
@Column(name = "EnglishLabel")
private String englishLabel;
public Status() {
}
public Status(Integer id) {
this.id = id;
}
public Status(Integer id, String arabicLabel, String englishLabel) {
this.id = id;
this.arabicLabel = arabicLabel;
this.englishLabel = englishLabel;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getListOrder() {
return listOrder;
}
public void setListOrder(Integer listOrder) {
this.listOrder = listOrder;
}
public Boolean getEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
public Boolean getEnableSLA() {
return enableSLA;
}
public void setEnableSLA(Boolean enableSLA) {
this.enableSLA = enableSLA;
}
public Boolean getDisplayOnTicketEdit() {
return displayOnTicketEdit;
}
public void setDisplayOnTicketEdit(Boolean displayOnTicketEdit) {
this.displayOnTicketEdit = displayOnTicketEdit;
}
public String getArabicLabel() {
return arabicLabel;
}
public void setArabicLabel(String arabicLabel) {
this.arabicLabel = arabicLabel;
}
public String getEnglishLabel() {
return englishLabel;
}
public void setEnglishLabel(String englishLabel) {
this.englishLabel = englishLabel;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Status)) {
return false;
}
Status other = (Status) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Status[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import java.util.List;
/**
* @author achah
*/
@Entity
@Table(name = "subcategory")
@XmlRootElement
public class Subcategory extends BasicModelWithIDInt {
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 150)
@Column(name = "ArabicLabel")
private String arabicLabel;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 150)
@Column(name = "EnglishLabel")
private String englishLabel;
@Column(name = "Enabled")
private Boolean enabled;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "subCategory", fetch = FetchType.LAZY)
private List<Topic> topicList;
@JoinColumn(name = "MainCategory", referencedColumnName = "ID")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Maincategory mainCategory;
public Subcategory() {
}
public Subcategory(Integer id) {
this.id = id;
}
public Subcategory(Integer id, String arabicLabel, String englishLabel) {
this.id = id;
this.arabicLabel = arabicLabel;
this.englishLabel = englishLabel;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getArabicLabel() {
return arabicLabel;
}
public void setArabicLabel(String arabicLabel) {
this.arabicLabel = arabicLabel;
}
public String getEnglishLabel() {
return englishLabel;
}
public void setEnglishLabel(String englishLabel) {
this.englishLabel = englishLabel;
}
public Boolean getEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
@XmlTransient
public List<Topic> getTopicList() {
return topicList;
}
public void setTopicList(List<Topic> topicList) {
this.topicList = topicList;
}
public Maincategory getMainCategory() {
return mainCategory;
}
public void setMainCategory(Maincategory mainCategory) {
this.mainCategory = mainCategory;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Subcategory)) {
return false;
}
Subcategory other = (Subcategory) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Subcategory[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import java.io.Serializable;
import java.math.BigInteger;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
/**
*
* @author achah
*/
@Entity
@Table(name = "subscriptions")
@XmlRootElement
public class Subscriptions extends BasicModelWithID {
@Column(name = "Topic")
private Integer topic;
@Column(name = "SubCategory")
private Integer subCategory;
@Column(name = "MainCat")
private Integer mainCat;
@Column(name = "TicketID")
private BigInteger ticketID;
@Size(max = 50)
@Column(name = "userID")
private String userID;
@Column(name = "subStatus")
private Short subStatus;
@Column(name = "OnCreate")
private Short onCreate;
@Column(name = "OnUpdate")
private Short onUpdate;
@Column(name = "OnClose")
private Short onClose;
@Size(max = 250)
@Column(name = "EmailID")
private String emailID;
public Subscriptions() {
}
public Subscriptions(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Integer getTopic() {
return topic;
}
public void setTopic(Integer topic) {
this.topic = topic;
}
public Integer getSubCategory() {
return subCategory;
}
public void setSubCategory(Integer subCategory) {
this.subCategory = subCategory;
}
public Integer getMainCat() {
return mainCat;
}
public void setMainCat(Integer mainCat) {
this.mainCat = mainCat;
}
public BigInteger getTicketID() {
return ticketID;
}
public void setTicketID(BigInteger ticketID) {
this.ticketID = ticketID;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public Short getSubStatus() {
return subStatus;
}
public void setSubStatus(Short subStatus) {
this.subStatus = subStatus;
}
public Short getOnCreate() {
return onCreate;
}
public void setOnCreate(Short onCreate) {
this.onCreate = onCreate;
}
public Short getOnUpdate() {
return onUpdate;
}
public void setOnUpdate(Short onUpdate) {
this.onUpdate = onUpdate;
}
public Short getOnClose() {
return onClose;
}
public void setOnClose(Short onClose) {
this.onClose = onClose;
}
public String getEmailID() {
return emailID;
}
public void setEmailID(String emailID) {
this.emailID = emailID;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Subscriptions)) {
return false;
}
Subscriptions other = (Subscriptions) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Subscriptions[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import java.math.BigInteger;
import java.util.Date;
import java.util.List;
/**
* @author achah
*/
@Entity
@Table(name = "ticket")
@XmlRootElement
public class Ticket {
@Id
@Basic(optional = false)
@NotNull
@Column(name = "ID")
private Long id;
@Column(name = "Topic")
private Integer topic;
@Column(name = "OriginalTopic")
private Integer originalTopic;
@Column(name = "CurrentStatus")
private Integer currentStatus;
@Size(max = 50)
@Column(name = "CreatedBy")
private String createdBy;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "ModifiedBy")
private String modifiedBy;
@Basic(optional = false)
@NotNull
@Column(name = "CreationDate")
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@Column(name = "ModificationDate")
@Temporal(TemporalType.TIMESTAMP)
private Date modificationDate;
@Column(name = "CrossedMainSLA")
private Short crossedMainSLA;
@Column(name = "CustomerAccount")
private BigInteger customerAccount;
@Column(name = "SourceChannel")
private Integer sourceChannel;
@Size(max = 300)
@Column(name = "Subject")
private String subject;
@Column(name = "TicketType")
private Integer ticketType;
@Size(max = 2147483647)
@Column(name = "Details")
private String details;
@Size(max = 50)
@Column(name = "AssignedTo")
private String assignedTo;
@Column(name = "EscalationCalDate")
@Temporal(TemporalType.TIMESTAMP)
private Date escalationCalDate;
@Column(name = "LastSLA")
private Integer lastSLA;
@Column(name = "Language")
private Integer language;
@Column(name = "Priority")
private Integer priority;
@Column(name = "LastTicketData")
private BigInteger lastTicketData;
@Column(name = "Solved")
private Short solved;
@Column(name = "Closed")
private Short closed;
@Column(name = "Deleted")
private Short deleted;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "ticketID", fetch = FetchType.LAZY)
private List<Ticketlock> ticketlockList;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "ticketID", fetch = FetchType.LAZY)
private List<Ticketdata> ticketdataList;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "ticketID", fetch = FetchType.LAZY)
private List<Escalationhistory> escalationhistoryList;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "ticketID", fetch = FetchType.LAZY)
private List<SmsHistory> smsHistoryList;
public Ticket() {
}
public Ticket(Long id) {
this.id = id;
}
public Ticket(Long id, String modifiedBy, Date creationDate) {
this.id = id;
this.modifiedBy = modifiedBy;
this.creationDate = creationDate;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Integer getTopic() {
return topic;
}
public void setTopic(Integer topic) {
this.topic = topic;
}
public Integer getOriginalTopic() {
return originalTopic;
}
public void setOriginalTopic(Integer originalTopic) {
this.originalTopic = originalTopic;
}
public Integer getCurrentStatus() {
return currentStatus;
}
public void setCurrentStatus(Integer currentStatus) {
this.currentStatus = currentStatus;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public String getModifiedBy() {
return modifiedBy;
}
public void setModifiedBy(String modifiedBy) {
this.modifiedBy = modifiedBy;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getModificationDate() {
return modificationDate;
}
public void setModificationDate(Date modificationDate) {
this.modificationDate = modificationDate;
}
public Short getCrossedMainSLA() {
return crossedMainSLA;
}
public void setCrossedMainSLA(Short crossedMainSLA) {
this.crossedMainSLA = crossedMainSLA;
}
public BigInteger getCustomerAccount() {
return customerAccount;
}
public void setCustomerAccount(BigInteger customerAccount) {
this.customerAccount = customerAccount;
}
public Integer getSourceChannel() {
return sourceChannel;
}
public void setSourceChannel(Integer sourceChannel) {
this.sourceChannel = sourceChannel;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public Integer getTicketType() {
return ticketType;
}
public void setTicketType(Integer ticketType) {
this.ticketType = ticketType;
}
public String getDetails() {
return details;
}
public void setDetails(String details) {
this.details = details;
}
public String getAssignedTo() {
return assignedTo;
}
public void setAssignedTo(String assignedTo) {
this.assignedTo = assignedTo;
}
public Date getEscalationCalDate() {
return escalationCalDate;
}
public void setEscalationCalDate(Date escalationCalDate) {
this.escalationCalDate = escalationCalDate;
}
public Integer getLastSLA() {
return lastSLA;
}
public void setLastSLA(Integer lastSLA) {
this.lastSLA = lastSLA;
}
public Integer getLanguage() {
return language;
}
public void setLanguage(Integer language) {
this.language = language;
}
public Integer getPriority() {
return priority;
}
public void setPriority(Integer priority) {
this.priority = priority;
}
public BigInteger getLastTicketData() {
return lastTicketData;
}
public void setLastTicketData(BigInteger lastTicketData) {
this.lastTicketData = lastTicketData;
}
public Short getSolved() {
return solved;
}
public void setSolved(Short solved) {
this.solved = solved;
}
public Short getClosed() {
return closed;
}
public void setClosed(Short closed) {
this.closed = closed;
}
public Short getDeleted() {
return deleted;
}
public void setDeleted(Short deleted) {
this.deleted = deleted;
}
@XmlTransient
public List<Ticketlock> getTicketlockList() {
return ticketlockList;
}
public void setTicketlockList(List<Ticketlock> ticketlockList) {
this.ticketlockList = ticketlockList;
}
@XmlTransient
public List<Ticketdata> getTicketdataList() {
return ticketdataList;
}
public void setTicketdataList(List<Ticketdata> ticketdataList) {
this.ticketdataList = ticketdataList;
}
@XmlTransient
public List<Escalationhistory> getEscalationhistoryList() {
return escalationhistoryList;
}
public void setEscalationhistoryList(List<Escalationhistory> escalationhistoryList) {
this.escalationhistoryList = escalationhistoryList;
}
@XmlTransient
public List<SmsHistory> getSmsHistoryList() {
return smsHistoryList;
}
public void setSmsHistoryList(List<SmsHistory> smsHistoryList) {
this.smsHistoryList = smsHistoryList;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Ticket)) {
return false;
}
Ticket other = (Ticket) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Ticket[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;
/**
* @author achah
*/
@Entity
@Table(name = "ticketactions")
@XmlRootElement
public class Ticketactions extends BasicModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ActionID")
private Integer actionID;
@Size(max = 150)
@Column(name = "ArabicLabel")
private String arabicLabel;
@Size(max = 150)
@Column(name = "EnglishLabel")
private String englishLabel;
@Column(name = "Enabled")
private Boolean enabled;
@Column(name = "SetStatusTo")
private Integer setStatusTo;
public Ticketactions() {
}
public Ticketactions(Integer actionID) {
this.actionID = actionID;
}
public Integer getActionID() {
return actionID;
}
public void setActionID(Integer actionID) {
this.actionID = actionID;
}
public String getArabicLabel() {
return arabicLabel;
}
public void setArabicLabel(String arabicLabel) {
this.arabicLabel = arabicLabel;
}
public String getEnglishLabel() {
return englishLabel;
}
public void setEnglishLabel(String englishLabel) {
this.englishLabel = englishLabel;
}
public Boolean getEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
public Integer getSetStatusTo() {
return setStatusTo;
}
public void setSetStatusTo(Integer setStatusTo) {
this.setStatusTo = setStatusTo;
}
@Override
public int hashCode() {
int hash = 0;
hash += (actionID != null ? actionID.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Ticketactions)) {
return false;
}
Ticketactions other = (Ticketactions) object;
if ((this.actionID == null && other.actionID != null) || (this.actionID != null && !this.actionID.equals(other.actionID))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Ticketactions[ actionID=" + actionID + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
import java.math.BigInteger;
import java.util.Date;
/**
* @author achah
*/
@Entity
@Table(name = "ticketdata")
@XmlRootElement
public class Ticketdata extends BasicModelWithID {
@Column(name = "ActionID")
private Integer actionID;
@Size(max = 400)
@Column(name = "Title")
private String title;
@Size(max = 2147483647)
@Column(name = "TicketData")
private String ticketData;
@Size(max = 2147483647)
@Column(name = "Notes")
private String notes;
@Column(name = "Hidden")
private Short hidden;
@Column(name = "OldStatus")
private Integer oldStatus;
@Column(name = "NewStatus")
private Integer newStatus;
@Column(name = "OldTopic")
private Integer oldTopic;
@Column(name = "NewTopic")
private Integer newTopic;
@Column(name = "NotificationID")
private BigInteger notificationID;
@Column(name = "Notify")
private Short notify;
@Column(name = "NotfiyStatus")
private Integer notfiyStatus;
@JoinColumn(name = "TicketID", referencedColumnName = "ID")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Ticket ticketID;
public Ticketdata() {
}
public Ticketdata(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Integer getActionID() {
return actionID;
}
public void setActionID(Integer actionID) {
this.actionID = actionID;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getTicketData() {
return ticketData;
}
public void setTicketData(String ticketData) {
this.ticketData = ticketData;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
public Short getHidden() {
return hidden;
}
public void setHidden(Short hidden) {
this.hidden = hidden;
}
public Integer getOldStatus() {
return oldStatus;
}
public void setOldStatus(Integer oldStatus) {
this.oldStatus = oldStatus;
}
public Integer getNewStatus() {
return newStatus;
}
public void setNewStatus(Integer newStatus) {
this.newStatus = newStatus;
}
public Integer getOldTopic() {
return oldTopic;
}
public void setOldTopic(Integer oldTopic) {
this.oldTopic = oldTopic;
}
public Integer getNewTopic() {
return newTopic;
}
public void setNewTopic(Integer newTopic) {
this.newTopic = newTopic;
}
public BigInteger getNotificationID() {
return notificationID;
}
public void setNotificationID(BigInteger notificationID) {
this.notificationID = notificationID;
}
public Short getNotify() {
return notify;
}
public void setNotify(Short notify) {
this.notify = notify;
}
public Integer getNotfiyStatus() {
return notfiyStatus;
}
public void setNotfiyStatus(Integer notfiyStatus) {
this.notfiyStatus = notfiyStatus;
}
public Ticket getTicketID() {
return ticketID;
}
public void setTicketID(Ticket ticketID) {
this.ticketID = ticketID;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Ticketdata)) {
return false;
}
Ticketdata other = (Ticketdata) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Ticketdata[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;
/**
* @author achah
*/
@Entity
@Table(name = "ticketExtData")
@XmlRootElement
public class TicketExtData {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Basic(optional = false)
@NotNull
@Column(name = "TicketID")
private long ticketID;
@Basic(optional = false)
@NotNull
@Column(name = "CreationDate")
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@Size(max = 250)
@Column(name = "ExtField1")
private String extField1;
@Size(max = 250)
@Column(name = "ExtField2")
private String extField2;
@Size(max = 250)
@Column(name = "ExtField3")
private String extField3;
@Size(max = 250)
@Column(name = "ExtField4")
private String extField4;
@Size(max = 250)
@Column(name = "ExtField5")
private String extField5;
@Size(max = 250)
@Column(name = "ExtField6")
private String extField6;
@Size(max = 250)
@Column(name = "ExtField7")
private String extField7;
@Size(max = 250)
@Column(name = "ExtField8")
private String extField8;
@Size(max = 250)
@Column(name = "ExtField9")
private String extField9;
@Size(max = 250)
@Column(name = "ExtField10")
private String extField10;
@Size(max = 250)
@Column(name = "ExtField11")
private String extField11;
@Size(max = 250)
@Column(name = "ExtField12")
private String extField12;
@Size(max = 250)
@Column(name = "ExtField13")
private String extField13;
@Size(max = 250)
@Column(name = "ExtField14")
private String extField14;
@Size(max = 250)
@Column(name = "ExtField15")
private String extField15;
@Size(max = 250)
@Column(name = "ExtField16")
private String extField16;
@Size(max = 250)
@Column(name = "ExtField17")
private String extField17;
@Size(max = 250)
@Column(name = "ExtField18")
private String extField18;
@Size(max = 250)
@Column(name = "ExtField19")
private String extField19;
@Size(max = 250)
@Column(name = "ExtField20")
private String extField20;
public TicketExtData() {
}
public TicketExtData(Long id) {
this.id = id;
}
public TicketExtData(Long id, long ticketID, Date creationDate) {
this.id = id;
this.ticketID = ticketID;
this.creationDate = creationDate;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public long getTicketID() {
return ticketID;
}
public void setTicketID(long ticketID) {
this.ticketID = ticketID;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public String getExtField1() {
return extField1;
}
public void setExtField1(String extField1) {
this.extField1 = extField1;
}
public String getExtField2() {
return extField2;
}
public void setExtField2(String extField2) {
this.extField2 = extField2;
}
public String getExtField3() {
return extField3;
}
public void setExtField3(String extField3) {
this.extField3 = extField3;
}
public String getExtField4() {
return extField4;
}
public void setExtField4(String extField4) {
this.extField4 = extField4;
}
public String getExtField5() {
return extField5;
}
public void setExtField5(String extField5) {
this.extField5 = extField5;
}
public String getExtField6() {
return extField6;
}
public void setExtField6(String extField6) {
this.extField6 = extField6;
}
public String getExtField7() {
return extField7;
}
public void setExtField7(String extField7) {
this.extField7 = extField7;
}
public String getExtField8() {
return extField8;
}
public void setExtField8(String extField8) {
this.extField8 = extField8;
}
public String getExtField9() {
return extField9;
}
public void setExtField9(String extField9) {
this.extField9 = extField9;
}
public String getExtField10() {
return extField10;
}
public void setExtField10(String extField10) {
this.extField10 = extField10;
}
public String getExtField11() {
return extField11;
}
public void setExtField11(String extField11) {
this.extField11 = extField11;
}
public String getExtField12() {
return extField12;
}
public void setExtField12(String extField12) {
this.extField12 = extField12;
}
public String getExtField13() {
return extField13;
}
public void setExtField13(String extField13) {
this.extField13 = extField13;
}
public String getExtField14() {
return extField14;
}
public void setExtField14(String extField14) {
this.extField14 = extField14;
}
public String getExtField15() {
return extField15;
}
public void setExtField15(String extField15) {
this.extField15 = extField15;
}
public String getExtField16() {
return extField16;
}
public void setExtField16(String extField16) {
this.extField16 = extField16;
}
public String getExtField17() {
return extField17;
}
public void setExtField17(String extField17) {
this.extField17 = extField17;
}
public String getExtField18() {
return extField18;
}
public void setExtField18(String extField18) {
this.extField18 = extField18;
}
public String getExtField19() {
return extField19;
}
public void setExtField19(String extField19) {
this.extField19 = extField19;
}
public String getExtField20() {
return extField20;
}
public void setExtField20(String extField20) {
this.extField20 = extField20;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof TicketExtData)) {
return false;
}
TicketExtData other = (TicketExtData) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.TicketExtData[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
/**
*
* @author achah
*/
@Entity
@Table(name = "ticketlock")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Ticketlock.findAll", query = "SELECT t FROM Ticketlock t")})
public class Ticketlock {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "LockID")
private Long lockID;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "UserID")
private String userID;
@Basic(optional = false)
@NotNull
@Column(name = "DateTime")
@Temporal(TemporalType.TIMESTAMP)
private Date dateTime;
@Basic(optional = false)
@NotNull
@Column(name = "ExpiresOn")
@Temporal(TemporalType.TIMESTAMP)
private Date expiresOn;
@JoinColumn(name = "TicketID", referencedColumnName = "ID")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Ticket ticketID;
public Ticketlock() {
}
public Ticketlock(Long lockID) {
this.lockID = lockID;
}
public Ticketlock(Long lockID, String userID, Date dateTime, Date expiresOn) {
this.lockID = lockID;
this.userID = userID;
this.dateTime = dateTime;
this.expiresOn = expiresOn;
}
public Long getLockID() {
return lockID;
}
public void setLockID(Long lockID) {
this.lockID = lockID;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public Date getDateTime() {
return dateTime;
}
public void setDateTime(Date dateTime) {
this.dateTime = dateTime;
}
public Date getExpiresOn() {
return expiresOn;
}
public void setExpiresOn(Date expiresOn) {
this.expiresOn = expiresOn;
}
public Ticket getTicketID() {
return ticketID;
}
public void setTicketID(Ticket ticketID) {
this.ticketID = ticketID;
}
@Override
public int hashCode() {
int hash = 0;
hash += (lockID != null ? lockID.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Ticketlock)) {
return false;
}
Ticketlock other = (Ticketlock) object;
if ((this.lockID == null && other.lockID != null) || (this.lockID != null && !this.lockID.equals(other.lockID))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Ticketlock[ lockID=" + lockID + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;
/**
* @author achah
*/
@Entity
@Table(name = "tickettypes")
@XmlRootElement
public class Tickettypes extends BasicModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Size(min = 1, max = 50)
@Column(name = "TypeID")
private String typeID;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 150)
@Column(name = "ArabicLabel")
private String arabicLabel;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 150)
@Column(name = "EnglishLabel")
private String englishLabel;
@Column(name = "Enabled")
private Short enabled;
public Tickettypes() {
}
public Tickettypes(String typeID) {
this.typeID = typeID;
}
public Tickettypes(String typeID, String arabicLabel, String englishLabel) {
this.typeID = typeID;
this.arabicLabel = arabicLabel;
this.englishLabel = englishLabel;
}
public String getTypeID() {
return typeID;
}
public void setTypeID(String typeID) {
this.typeID = typeID;
}
public String getArabicLabel() {
return arabicLabel;
}
public void setArabicLabel(String arabicLabel) {
this.arabicLabel = arabicLabel;
}
public String getEnglishLabel() {
return englishLabel;
}
public void setEnglishLabel(String englishLabel) {
this.englishLabel = englishLabel;
}
public Short getEnabled() {
return enabled;
}
public void setEnabled(Short enabled) {
this.enabled = enabled;
}
@Override
public int hashCode() {
int hash = 0;
hash += (typeID != null ? typeID.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Tickettypes)) {
return false;
}
Tickettypes other = (Tickettypes) object;
if ((this.typeID == null && other.typeID != null) || (this.typeID != null && !this.typeID.equals(other.typeID))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Tickettypes[ typeID=" + typeID + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import java.util.List;
/**
* @author achah
*/
@Entity
@Table(name = "topic")
@XmlRootElement
public class Topic extends BasicModelWithIDInt {
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 150)
@Column(name = "ArabicLabel")
private String arabicLabel;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 150)
@Column(name = "EnglishLabel")
private String englishLabel;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 2147483647)
@Column(name = "Configuration")
private String configuration;
@Column(name = "Enabled")
private Boolean enabled;
@Size(max = 2147483647)
@Column(name = "Principals")
private String principals;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "topicId", fetch = FetchType.LAZY)
private List<Topicspermissions> topicspermissionsList;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "topicID", fetch = FetchType.LAZY)
private List<Usertopic> usertopicList;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "topicID", fetch = FetchType.LAZY)
private List<Topicsla> topicslaList;
@JoinColumn(name = "SubCategory", referencedColumnName = "ID")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Subcategory subCategory;
public Topic() {
}
public Topic(Integer id) {
this.id = id;
}
public Topic(Integer id, String arabicLabel, String englishLabel, String configuration) {
this.id = id;
this.arabicLabel = arabicLabel;
this.englishLabel = englishLabel;
this.configuration = configuration;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getArabicLabel() {
return arabicLabel;
}
public void setArabicLabel(String arabicLabel) {
this.arabicLabel = arabicLabel;
}
public String getEnglishLabel() {
return englishLabel;
}
public void setEnglishLabel(String englishLabel) {
this.englishLabel = englishLabel;
}
public String getConfiguration() {
return configuration;
}
public void setConfiguration(String configuration) {
this.configuration = configuration;
}
public Boolean getEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
public String getPrincipals() {
return principals;
}
public void setPrincipals(String principals) {
this.principals = principals;
}
@XmlTransient
public List<Topicspermissions> getTopicspermissionsList() {
return topicspermissionsList;
}
public void setTopicspermissionsList(List<Topicspermissions> topicspermissionsList) {
this.topicspermissionsList = topicspermissionsList;
}
@XmlTransient
public List<Usertopic> getUsertopicList() {
return usertopicList;
}
public void setUsertopicList(List<Usertopic> usertopicList) {
this.usertopicList = usertopicList;
}
@XmlTransient
public List<Topicsla> getTopicslaList() {
return topicslaList;
}
public void setTopicslaList(List<Topicsla> topicslaList) {
this.topicslaList = topicslaList;
}
public Subcategory getSubCategory() {
return subCategory;
}
public void setSubCategory(Subcategory subCategory) {
this.subCategory = subCategory;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Topic)) {
return false;
}
Topic other = (Topic) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Topic[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
/**
* @author achah
*/
@Entity
@Table(name = "topicsla")
@XmlRootElement
public class Topicsla extends BasicModelWithIDInt {
@Basic(optional = false)
@NotNull
@Column(name = "SLALevel")
private int sLALevel;
@Size(max = 500)
@Column(name = "SLAImpl")
private String sLAImpl;
@JoinColumn(name = "SLAID", referencedColumnName = "ID")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Sla slaid;
@JoinColumn(name = "TopicID", referencedColumnName = "ID")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Topic topicID;
public Topicsla() {
}
public Topicsla(Integer id) {
this.id = id;
}
public Topicsla(Integer id, int sLALevel) {
this.id = id;
this.sLALevel = sLALevel;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public int getSLALevel() {
return sLALevel;
}
public void setSLALevel(int sLALevel) {
this.sLALevel = sLALevel;
}
public String getSLAImpl() {
return sLAImpl;
}
public void setSLAImpl(String sLAImpl) {
this.sLAImpl = sLAImpl;
}
public Sla getSlaid() {
return slaid;
}
public void setSlaid(Sla slaid) {
this.slaid = slaid;
}
public Topic getTopicID() {
return topicID;
}
public void setTopicID(Topic topicID) {
this.topicID = topicID;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Topicsla)) {
return false;
}
Topicsla other = (Topicsla) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Topicsla[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;
/**
* @author achah
*/
@Entity
@Table(name = "topicspermissions")
@XmlRootElement
public class Topicspermissions extends BasicModelWithID {
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "assigne")
private String assigne;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 10)
@Column(name = "type")
private String type;
@Column(name = "admin")
private Short admin;
@Column(name = "canCreate")
private Short canCreate;
@Column(name = "canRead")
private Short canRead;
@Column(name = "canDelete")
private Short canDelete;
@Column(name = "canWrite")
private Short canWrite;
@Column(name = "canRunReport")
private Short canRunReport;
@JoinColumn(name = "topicId", referencedColumnName = "ID")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Topic topicId;
public Topicspermissions() {
}
public Topicspermissions(Long id) {
this.id = id;
}
public Topicspermissions(Long id, String assigne, String type) {
this.id = id;
this.assigne = assigne;
this.type = type;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getAssigne() {
return assigne;
}
public void setAssigne(String assigne) {
this.assigne = assigne;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Short getAdmin() {
return admin;
}
public void setAdmin(Short admin) {
this.admin = admin;
}
public Short getCanCreate() {
return canCreate;
}
public void setCanCreate(Short canCreate) {
this.canCreate = canCreate;
}
public Short getCanRead() {
return canRead;
}
public void setCanRead(Short canRead) {
this.canRead = canRead;
}
public Short getCanDelete() {
return canDelete;
}
public void setCanDelete(Short canDelete) {
this.canDelete = canDelete;
}
public Short getCanWrite() {
return canWrite;
}
public void setCanWrite(Short canWrite) {
this.canWrite = canWrite;
}
public Short getCanRunReport() {
return canRunReport;
}
public void setCanRunReport(Short canRunReport) {
this.canRunReport = canRunReport;
}
public Topic getTopicId() {
return topicId;
}
public void setTopicId(Topic topicId) {
this.topicId = topicId;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Topicspermissions)) {
return false;
}
Topicspermissions other = (Topicspermissions) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Topicspermissions[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;
/**
* @author achah
*/
@Entity
@Table(name = "usergroups")
@XmlRootElement
public class Usergroups {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
protected Integer id;
@ManyToOne
@JoinColumn(name = "groupID")
private Groups groupID;
@ManyToOne
@JoinColumn(name = "userID")
private Users userID;
@Column(name = "CreatedBy")
@CreatedBy
protected String createdBy;
@CreatedDate
@Column(name = "CreationDate")
protected Date creationDate;
public Usergroups() {
}
public Usergroups(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Groups getGroupID() {
return groupID;
}
public void setGroupID(Groups groupID) {
this.groupID = groupID;
}
public Users getUserID() {
return userID;
}
public void setUserID(Users userID) {
this.userID = userID;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Usergroups)) {
return false;
}
Usergroups other = (Usergroups) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Usergroups[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;
/**
* @author achah
*/
@Entity
@Table(name = "userpreferences")
@XmlRootElement
public class Userpreferences extends BasicModelWithID {
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "UserID")
private String userID;
@Basic(optional = false)
@NotNull
@Column(name = "EmailsNotifications")
private short emailsNotifications;
@Size(max = 20)
@Column(name = "Language")
private String language;
@Lob
@Column(name = "Avatar")
private byte[] avatar;
@Column(name = "SLAEmails")
private Short sLAEmails;
@Column(name = "TicketCreationEmails")
private Short ticketCreationEmails;
@Column(name = "TicketEditEmails")
private Short ticketEditEmails;
@Column(name = "TicketAssignEmails")
private Short ticketAssignEmails;
@Column(name = "EmailDigest")
private Short emailDigest;
@Column(name = "IncludeAttatchments")
private Short includeAttatchments;
@Column(name = "AutoSubOnCreate")
private Short autoSubOnCreate;
@Column(name = "AutoSubOnClose")
private Short autoSubOnClose;
@Column(name = "AutoSubOnEdit")
private Short autoSubOnEdit;
@Column(name = "AutoSubOnAssign")
private Short autoSubOnAssign;
public Userpreferences() {
}
public Userpreferences(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public short getEmailsNotifications() {
return emailsNotifications;
}
public void setEmailsNotifications(short emailsNotifications) {
this.emailsNotifications = emailsNotifications;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public byte[] getAvatar() {
return avatar;
}
public void setAvatar(byte[] avatar) {
this.avatar = avatar;
}
public Short getSLAEmails() {
return sLAEmails;
}
public void setSLAEmails(Short sLAEmails) {
this.sLAEmails = sLAEmails;
}
public Short getTicketCreationEmails() {
return ticketCreationEmails;
}
public void setTicketCreationEmails(Short ticketCreationEmails) {
this.ticketCreationEmails = ticketCreationEmails;
}
public Short getTicketEditEmails() {
return ticketEditEmails;
}
public void setTicketEditEmails(Short ticketEditEmails) {
this.ticketEditEmails = ticketEditEmails;
}
public Short getTicketAssignEmails() {
return ticketAssignEmails;
}
public void setTicketAssignEmails(Short ticketAssignEmails) {
this.ticketAssignEmails = ticketAssignEmails;
}
public Short getEmailDigest() {
return emailDigest;
}
public void setEmailDigest(Short emailDigest) {
this.emailDigest = emailDigest;
}
public Short getIncludeAttatchments() {
return includeAttatchments;
}
public void setIncludeAttatchments(Short includeAttatchments) {
this.includeAttatchments = includeAttatchments;
}
public Short getAutoSubOnCreate() {
return autoSubOnCreate;
}
public void setAutoSubOnCreate(Short autoSubOnCreate) {
this.autoSubOnCreate = autoSubOnCreate;
}
public Short getAutoSubOnClose() {
return autoSubOnClose;
}
public void setAutoSubOnClose(Short autoSubOnClose) {
this.autoSubOnClose = autoSubOnClose;
}
public Short getAutoSubOnEdit() {
return autoSubOnEdit;
}
public void setAutoSubOnEdit(Short autoSubOnEdit) {
this.autoSubOnEdit = autoSubOnEdit;
}
public Short getAutoSubOnAssign() {
return autoSubOnAssign;
}
public void setAutoSubOnAssign(Short autoSubOnAssign) {
this.autoSubOnAssign = autoSubOnAssign;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Userpreferences)) {
return false;
}
Userpreferences other = (Userpreferences) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Userpreferences[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import javax.persistence.*;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;
/**
* @author achah
*/
@Entity
@Table(name = "userroles")
@XmlRootElement
public class Userroles {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@ManyToOne
@JoinColumn(name = "userID")
private Users userID;
@ManyToOne
@JoinColumn(name = "roleID")
private Roles roleID;
@Basic(optional = false)
@CreatedDate
@Column(name = "CreationDate")
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@Basic(optional = false)
@CreatedBy
@Size(min = 1, max = 50)
@Column(name = "CreatedBy")
private String createdBy;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "userroles1", fetch = FetchType.LAZY)
private Userroles userroles;
@JoinColumn(name = "ID", referencedColumnName = "ID", insertable = false, updatable = false)
@OneToOne(optional = false, fetch = FetchType.LAZY)
private Userroles userroles1;
public Userroles() {
}
public Userroles(Long id) {
this.id = id;
}
public Userroles(Long id, Users userID, Roles roleID, Date creationDate, String createdBy) {
this.id = id;
this.userID = userID;
this.roleID = roleID;
this.creationDate = creationDate;
this.createdBy = createdBy;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Users getUserID() {
return userID;
}
public void setUserID(Users userID) {
this.userID = userID;
}
public Roles getRoleID() {
return roleID;
}
public void setRoleID(Roles roleID) {
this.roleID = roleID;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public Userroles getUserroles() {
return userroles;
}
public void setUserroles(Userroles userroles) {
this.userroles = userroles;
}
public Userroles getUserroles1() {
return userroles1;
}
public void setUserroles1(Userroles userroles1) {
this.userroles1 = userroles1;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Userroles)) {
return false;
}
Userroles other = (Userroles) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Userroles[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import com.fasterxml.jackson.annotation.JsonIgnore;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;
/**
* @author achah
*/
@Entity
@Table(name = "users")
@XmlRootElement
public class Users extends BasicModelWithIDInt {
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "UserID")
private String userID;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 500)
@Column(name = "FirstName")
private String firstName;
@Size(max = 500)
@Column(name = "LastName")
private String lastName;
@Pattern(regexp = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message = "Invalid email")
//if the field contains email address consider using this annotation to enforce field validation
@Size(max = 250)
@Column(name = "Email")
private String email;
@JsonIgnore
@Size(max = 256)
@Column(name = "Password")
private String password;
@Size(max = 20)
@Column(name = "StaffID")
private String staffID;
@Column(name = "Enabled")
private Boolean enabled;
@Size(max = 10)
@Column(name = "Locale")
private String locale;
@Column(name = "LoginAttempts")
private Integer loginAttempts;
@Column(name = "SystemUser")
private Boolean systemUser;
@Size(max = 150)
@Column(name = "Title")
private String title;
@Size(max = 50)
@Column(name = "Department")
private String department;
@Column(name = "LDAPUser")
private Boolean lDAPUser;
public Users() {
}
public Users(Integer id) {
this.id = id;
}
public Users(Integer id, String userID, String firstName) {
this.id = id;
this.userID = userID;
this.firstName = firstName;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getStaffID() {
return staffID;
}
public void setStaffID(String staffID) {
this.staffID = staffID;
}
public Boolean getEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
public String getLocale() {
return locale;
}
public void setLocale(String locale) {
this.locale = locale;
}
public Integer getLoginAttempts() {
return loginAttempts;
}
public void setLoginAttempts(Integer loginAttempts) {
this.loginAttempts = loginAttempts;
}
public Boolean getSystemUser() {
return systemUser;
}
public void setSystemUser(Boolean systemUser) {
this.systemUser = systemUser;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public Boolean getLDAPUser() {
return lDAPUser;
}
public void setLDAPUser(Boolean lDAPUser) {
this.lDAPUser = lDAPUser;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Users)) {
return false;
}
Users other = (Users) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Users[ id=" + id + " ]";
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.sh.crm.jpa.entities;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
/**
* @author achah
*/
@Entity
@Table(name = "usertopic")
@XmlRootElement
public class Usertopic extends BasicModelWithIDInt {
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "UserID")
private String userID;
@Basic(optional = false)
@NotNull
@Column(name = "Status")
private short status;
@JoinColumn(name = "TopicID", referencedColumnName = "ID")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Topic topicID;
public Usertopic() {
}
public Usertopic(Integer id) {
this.id = id;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public short getStatus() {
return status;
}
public void setStatus(short status) {
this.status = status;
}
public Topic getTopicID() {
return topicID;
}
public void setTopicID(Topic topicID) {
this.topicID = topicID;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Usertopic)) {
return false;
}
Usertopic other = (Usertopic) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.sh.crm.jpa.entities.Usertopic[ id=" + id + " ]";
}
}
package com.sh.crm.jpa.repos;
import com.sh.crm.jpa.entities.Permissions;
import java.util.List;
public interface GetUsersPermissionsCustom {
List<Permissions> usersPermission(Integer ID);
}
package com.sh.crm.jpa.repos;
import com.sh.crm.jpa.entities.Grouproles;
import com.sh.crm.jpa.entities.Groups;
import org.springframework.data.jpa.repository.JpaRepository;
public interface GroupRolesRepo extends JpaRepository<Grouproles, Integer> {
void deleteByGroupID(Groups group);
}
package com.sh.crm.jpa.repos;
import com.sh.crm.jpa.entities.Groups;
import com.sh.crm.jpa.entities.Users;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface GroupsRepo extends JpaRepository<Groups, Integer> {
List<Groups> findByEnabled(boolean enabled);
Groups findByGroupName(String groupName);
}
package com.sh.crm.jpa.repos;
import com.sh.crm.jpa.entities.Permissions;
import org.springframework.data.repository.CrudRepository;
public interface PermissionsRepo extends CrudRepository<Permissions, Integer>, GetUsersPermissionsCustom {
}
package com.sh.crm.jpa.repos;
import com.sh.crm.jpa.entities.Permissions;
import javax.persistence.EntityManager;
import javax.persistence.ParameterMode;
import javax.persistence.PersistenceContext;
import javax.persistence.StoredProcedureQuery;
import java.util.List;
public class PermissionsRepoImpl implements GetUsersPermissionsCustom {
@PersistenceContext
private EntityManager em;
@Override
public List<Permissions> usersPermission(Integer id) {
StoredProcedureQuery findUsersPerms =
em.createNamedStoredProcedureQuery("GetPermissions");
//findUsersPerms.registerStoredProcedureParameter(1, Integer.class, ParameterMode.IN);
findUsersPerms.setParameter(1, id);
// .registerStoredProcedureParameter(2, void.class, ParameterMode.REF_CURSOR)
return findUsersPerms.getResultList();
}
}
package com.sh.crm.jpa.repos;
import com.sh.crm.jpa.entities.Permissions;
import com.sh.crm.jpa.entities.Rolepermissions;
import com.sh.crm.jpa.entities.Roles;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface RolesPermissionsRepo extends CrudRepository<Rolepermissions, Integer> {
@Query("select role.permissionID from Rolepermissions role where role.roleID=?1")
List<Permissions> getRolePermissions(Roles role);
}
package com.sh.crm.jpa.repos;
import com.sh.crm.jpa.entities.Roles;
import org.springframework.data.jpa.repository.JpaRepository;
public interface RolesRepo extends JpaRepository<Roles,Integer> {
}
package com.sh.crm.jpa.repos;
import com.sh.crm.jpa.entities.Groups;
import com.sh.crm.jpa.entities.Usergroups;
import com.sh.crm.jpa.entities.Users;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface UserGroupsRepo extends CrudRepository<Usergroups, Long> {
List<Usergroups> findByUserID(int userID);
@Query(value = "select ug.groupID from Usergroups ug where ug.userID=?1")
List<Groups> findGroupsOfUser(int userID);
@Query("select g.userID from Usergroups g where g.groupID.id=?1")
List<Users> getGroupUsers(Integer groups);
void deleteByUserID(Users userID);
void deleteByGroupID(Groups groups);
}
package com.sh.crm.jpa.repos;
import com.sh.crm.jpa.entities.Users;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
public interface UsersRepos extends JpaRepository<Users, Integer> {
Users findByUserID(String username);
@Override
@Query("select u from Users u where u.systemUser=false")
List<Users> findAll();
@Modifying
void deleteByUserID(String username);
@Modifying
void deleteById(Integer id);
@Query("select u from Users u where u.id=?1 and u.systemUser=false")
Users findById(Integer id);
List<Users> findByEnabledAndSystemUser(boolean enabled, boolean systemUser);
Users findByUserIDAndPassword(String username, String password);
Users findByUserIDAndEnabledAndLDAPUser(String username, boolean enabled, boolean LDAPUser);
/* @Query(nativeQuery = true, value = "SELECT * FROM [USER] WHERE username=?1 and password=?2 and [enabled]=1 and LDAPuser=0 ")
User validateCredentials(String username,String password);*/
/* @Modifying
@Transactional
@Query(nativeQuery = true, value = "insert into USER_AUTHORITY Values(?1,?2)")
void addUserRoles(Long userID, Long authority);*/
/**
@Modifying
@Transactional
@Query(nativeQuery = true, value = "insert into USER_GROUP Values(?1,?2)")
void addUserGroups(Long userID, Long groupID);
@Modifying
@Transactional
@Query(nativeQuery = true, value = "delete from USER_AUTHORITY where USER_ID=?1")
void deleteUserRoles(Long userID);
@Modifying
@Transactional
@Query(nativeQuery = true, value = "delete from USER_GROUP where USER_ID=?")
void deleteUserGroups(Long userID);
*/
}
package com.sh.crm.jpa.repos;
import com.sh.crm.jpa.entities.Roles;
import com.sh.crm.jpa.entities.Userroles;
import com.sh.crm.jpa.entities.Users;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface UsersRolesRepo extends CrudRepository<Userroles, Long> {
void deleteByUserID(Users userID);
List<Userroles> findByUserID(Integer userID);
@Query( value = "SELECT ur.roleID FROM Userroles ur where ur.userID=?1")
List<Roles> getUserRoles(Integer id);
}
package com.sh.crm;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
@SpringBootApplication
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableAutoConfiguration
public class MiniCrmWithTicketingModuleApplication {
public static void main(String[] args) {
SpringApplication.run(MiniCrmWithTicketingModuleApplication.class, args);
}
}
package com.sh.crm.rest.controllers;
import com.sh.crm.config.general.ResponseCode;
import com.sh.crm.general.Errors;
import com.sh.crm.general.exceptions.GeneralException;
import com.sh.crm.general.holders.GroupHolder;
import com.sh.crm.jpa.entities.*;
import com.sh.crm.jpa.repos.GroupRolesRepo;
import com.sh.crm.jpa.repos.GroupsRepo;
import com.sh.crm.jpa.repos.UserGroupsRepo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.transaction.Transactional;
import javax.validation.Valid;
import java.util.List;
@RestController
@RequestMapping("/groups")
@PreAuthorize("hasAnyAuthority('Administrator','GroupsAdmin')")
public class GroupsRestController {
private static final Logger log = LoggerFactory.getLogger(GroupsRestController.class);
@Autowired
private GroupsRepo groupRepo;
@Autowired
private GroupRolesRepo groupRolesRepo;
@Autowired
private UserGroupsRepo userGroupsRepo;
@GetMapping("all")
Iterable<Groups> findAll() {
return groupRepo.findAll();
}
@GetMapping("/active/{status}")
Iterable<Groups> findByStatus(@PathVariable("status") boolean status) {
return groupRepo.findByEnabled(status);
}
@PostMapping("create")
@Transactional
public ResponseEntity<?> createGroup(@RequestBody @Valid GroupHolder groupHolder) throws GeneralException {
log.debug("create group {} requested", groupHolder.toString());
Groups group = new Groups();
group.setEnabled(true);
group.setGroupName(groupHolder.getName());
try {
groupRepo.save(group);
log.info("Group {} has been created", group);
} catch (Exception e) {
log.error("Error creating group: " + groupHolder.getName() + ", error: " + e);
e.printStackTrace();
throw new GeneralException(Errors.GROUP_CREATE_FAILED, e.toString());
}
try {
if (group.getId() != null) {
if (groupHolder.getRoles() != null && !groupHolder.getRoles().isEmpty())
createGroupRoles(group, groupHolder.getRoles());
if (groupHolder.getUsers() != null && !groupHolder.getUsers().isEmpty())
createGroupUsers(group, groupHolder.getUsers());
}
} catch (Exception e) {
log.error("Error creating user group: " + groupHolder.getName() + ", error: " + e);
e.printStackTrace();
throw new GeneralException(Errors.GROUP_CREATED_OTHER_FAILED, e.toString());
}
return new ResponseEntity<ResponseCode>(new ResponseCode(Errors.SUCCESSFUL), HttpStatus.OK);
}
@PostMapping("edit")
@Transactional
public ResponseEntity<?> editGroup(@RequestBody @Valid GroupHolder groupHolder) throws GeneralException {
log.debug("Received modify Groups request: " + groupHolder.toString());
Groups group = groupRepo.findOne(groupHolder.getGroup().getId());
group.setGroupName(groupHolder.getName());
try {
groupRepo.save(group);
} catch (Exception e) {
log.error("Error modifying group: {} , Exception {}", groupHolder.getName(), e);
e.printStackTrace();
throw new GeneralException(Errors.GROUP_EDIT_FAILED, e.toString());
}
log.debug("Groups modified successfully, name: " + group.getGroupName());
try {
if (groupHolder.getRoles() != null && !groupHolder.getRoles().isEmpty()) {
deleteGroupRoles(group);
createGroupRoles(group, groupHolder.getRoles());
}
if (groupHolder.getUsers() != null && !groupHolder.getUsers().isEmpty()) {
deleteGroupUsers(group);
createGroupUsers(group, groupHolder.getUsers());
}
} catch (Exception e) {
log.error("Error modifying group: " + groupHolder.getName() + ", error: " + e);
e.printStackTrace();
throw new GeneralException(Errors.GROUP_EDIT_OTHER_FAILED, e.toString());
}
return new ResponseEntity<ResponseCode>(new ResponseCode(Errors.SUCCESSFUL), HttpStatus.OK);
}
@GetMapping("users/{groupID}")
public List<Users> getUsers(@PathVariable("groupID") Integer groupID) {
return userGroupsRepo.getGroupUsers(groupID);
}
@GetMapping("{groupID}")
public ResponseEntity<Groups> getById(@PathVariable("groupID") Integer id) {
Groups group = groupRepo.findOne(id);
if (group != null) {
return ResponseEntity.ok(group);
}
return new ResponseEntity(new ResponseCode(Errors.GROUP_NOT_EXISTS), HttpStatus.BAD_REQUEST);
}
@GetMapping("validate/{groupname}")
public ResponseEntity<?> validateGroup(@PathVariable("groupname") String groupname) {
if (groupRepo.findByGroupName(groupname) != null) {
return ResponseEntity.ok(new ResponseCode(Errors.SUCCESSFUL));
} else
return new ResponseEntity(new ResponseCode(Errors.GROUP_NOT_EXISTS), HttpStatus.OK);
}
public void createGroupRoles(Groups group, List<Roles> roles) {
for (Roles role : roles) {
Grouproles gr = new Grouproles();
gr.setGroupID(group);
gr.setRoleID(role);
groupRolesRepo.save(gr);
gr = null;
}
}
public void deleteGroupRoles(Groups groupID) {
groupRolesRepo.deleteByGroupID(groupID);
}
public void createGroupUsers(Groups group, List<Users> users) {
for (Users user : users) {
Usergroups ug = new Usergroups();
ug.setGroupID(group);
ug.setUserID(user);
userGroupsRepo.save(ug);
ug = null;
}
}
public void deleteGroupUsers(Groups groupID) {
userGroupsRepo.deleteByGroupID(groupID);
}
}
package com.sh.crm.rest.controllers;
import com.sh.crm.jpa.entities.Permissions;
import com.sh.crm.jpa.repos.PermissionsRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/permissions")
@PreAuthorize("hasAnyAuthority('Administrator','RolesAdmin')")
public class PermissionsRestController {
@Autowired
private PermissionsRepo permissionsRepo;
@GetMapping("all")
Iterable<Permissions> getAll() {
return permissionsRepo.findAll();
}
}
package com.sh.crm.rest.controllers;
import com.sh.crm.config.general.ResponseCode;
import com.sh.crm.general.Errors;
import com.sh.crm.general.exceptions.GeneralException;
import com.sh.crm.general.holders.RoleHolder;
import com.sh.crm.jpa.entities.Permissions;
import com.sh.crm.jpa.entities.Rolepermissions;
import com.sh.crm.jpa.entities.Roles;
import com.sh.crm.jpa.repos.RolesPermissionsRepo;
import com.sh.crm.jpa.repos.RolesRepo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/roles")
@PreAuthorize("hasAnyAuthority('Administrator','RolesAdmin')")
public class RolesRestController {
@Autowired
private RolesRepo rolesRepo;
@Autowired
private RolesPermissionsRepo rolesPermissionsRepo;
private static final Logger log = LoggerFactory.getLogger(RolesRestController.class);
@GetMapping("all")
List<Roles> getAll() {
return rolesRepo.findAll();
}
@GetMapping("permissions/{roleID}")
List<Permissions> getPermissions(@PathVariable("roleID") Integer roleID) {
return rolesPermissionsRepo.getRolePermissions(new Roles(roleID));
}
@PostMapping("create")
ResponseEntity<?> create(@RequestBody RoleHolder roleHolder) {
if (roleHolder != null && roleHolder.getRole() != null && roleHolder.getPermissions() != null && !roleHolder.getPermissions().isEmpty()) {
Roles role = roleHolder.getRole();
role.setId(null);
try {
rolesRepo.save(role);
for (Permissions permissions : roleHolder.getPermissions()) {
Rolepermissions rp = new Rolepermissions();
rp.setPermissionID(permissions);
rp.setRoleID(role);
rolesPermissionsRepo.save(rp);
rp = null;
}
return new ResponseEntity<ResponseCode>(new ResponseCode(Errors.SUCCESSFUL), HttpStatus.OK);
} catch (Exception e) {
e.printStackTrace();
throw new GeneralException(Errors.GROUP_CREATE_FAILED, e.toString());
}
}
}
}
package com.sh.crm.rest.controllers;
import com.sh.crm.config.general.ResponseCode;
import com.sh.crm.general.Errors;
import com.sh.crm.general.exceptions.GeneralException;
import com.sh.crm.general.holders.UserHolder;
import com.sh.crm.jpa.entities.*;
import com.sh.crm.jpa.repos.UserGroupsRepo;
import com.sh.crm.jpa.repos.UsersRepos;
import com.sh.crm.jpa.repos.UsersRolesRepo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.bind.annotation.*;
import javax.transaction.Transactional;
import javax.validation.Valid;
import java.util.List;
@RestController
@RequestMapping("/users")
@PreAuthorize("hasAnyAuthority('Administrator','UsersAdmin')")
public class UsersRestController {
private static final Logger log = LoggerFactory.getLogger(UsersRestController.class);
@Autowired
private UsersRepos userRepo;
@Autowired
private UsersRolesRepo usersRolesRepo;
@Autowired
private UserGroupsRepo userGroupsRepo;
private BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
@GetMapping("all")
public List<Users> getAllUsers() {
log.debug("Getting all users list");
return userRepo.findAll();
}
@GetMapping("active")
ResponseEntity<?> getActive() {
List<Users> usersList = userRepo.findByEnabledAndSystemUser(true, false);
log.debug("Getting active users list");
if (usersList != null) {
return ResponseEntity.ok(usersList);
}
return ResponseEntity.noContent().build();
}
@GetMapping("validate/{username}")
ResponseEntity<?> validateUser(@PathVariable("username") String userName) {
log.debug("checking existence of user: " + userName);
if (userRepo.findByUserID(userName) != null) {
return ResponseEntity.ok(new ResponseCode(Errors.SUCCESSFUL));
} else
return new ResponseEntity(new ResponseCode(Errors.USER_NOT_EXISTS), HttpStatus.OK);
}
@PostMapping("create")
@Transactional
ResponseEntity<?> addUser(@RequestBody @Valid UserHolder userHolder) throws GeneralException {
log.debug("received a request to create user: " + userHolder.getUser().toString());
if (userHolder.getUser().getUserID() != null) {
if (userRepo.findByUserID(userHolder.getUser().getUserID()) != null) {
throw new GeneralException(Errors.USER_ALREADY_EXISTS, userHolder.getUser().getUserID());
}
Users user = userHolder.getUser();
if (!user.getLDAPUser())
user.setPassword(encoder.encode(userHolder.getPassword()));
user.setEnabled(true);
user.setSystemUser(false);
try {
userRepo.save(user);
log.info("User : " + user.getUserID() + " created successfully");
} catch (Exception e) {
log.error("Error Creating user: " + user + ", error: " + e);
e.printStackTrace();
throw new
GeneralException(Errors.CANNOT_CREATE_USER, e);
}
createRoles(user, userHolder.getSelectedRoles());
createGroups(user, userHolder.getSelectedGroups());
log.info("User groups and Roles for User: " + user.getUserID() + " created sucessfully");
return ResponseEntity.ok(new ResponseCode("0", Errors.SUCCESSFUL.getDesc()));
}
return ResponseEntity.ok(new ResponseCode(Errors.CANNOT_CREATE_USER));
}
@PostMapping("edit")
@Transactional
public ResponseEntity<?> editUser(@RequestBody @Valid UserHolder userHolder) throws GeneralException {
Users user = userHolder.getUser();
log.debug("Received request to edit user: " + userHolder);
try {
if (user != null && user.getId() != null && user.getUserID() != null) {
Users origianlUser = userRepo.findById(user.getId());
//validateSuperUser(user);
if (!user.getLDAPUser() && userHolder.getPassword() != null && !userHolder.getPassword().equals("")) {
// origianlUser.setLastPasswordResetDate(Calendar.getInstance().getTime());
origianlUser.setPassword(encoder.encode(userHolder.getPassword()));
}
origianlUser.setLastName(user.getLastName());
origianlUser.setFirstName(user.getFirstName());
origianlUser.setEmail(user.getEmail());
origianlUser.setEnabled(user.getEnabled());
userRepo.save(origianlUser);
}
} catch (Exception e) {
log.error("Error Editing user : " + user.getUserID() + ", error: " + e);
e.printStackTrace();
throw new GeneralException(Errors.USER_EDIT_FAILED.getCode(),
Errors.USER_EDIT_FAILED.getDesc() + ", exception: " + e);
}
if (userHolder.getSelectedRoles() != null || userHolder.getSelectedRoles() != null) {
log.info("User Groups/Roles modification requested for user: " + user);
if (userHolder.getSelectedGroups() != null && !userHolder.getSelectedGroups().isEmpty()) {
deleteGroups(user);
createGroups(user, userHolder.getSelectedGroups());
log.info("User: " + user.getUserID() + " Groups have been updated");
}
if (userHolder.getSelectedRoles() != null && !userHolder.getSelectedRoles().isEmpty()) {
deleteRoles(user);
createRoles(user, userHolder.getSelectedRoles());
log.info("User: " + user.getUserID() + " Roles have been updated");
}
}
return ResponseEntity.ok(new ResponseCode(Errors.SUCCESSFUL));
}
@GetMapping("disable/{userID}")
@Transactional
public ResponseEntity<?> disableUser(@PathVariable("userID") Integer userID) throws GeneralException {
Users user = userRepo.findById(userID);
// validateSuperUser(user);
user.setEnabled(false);
userRepo.save(user);
return new ResponseEntity<ResponseCode>(new ResponseCode(Errors.SUCCESSFUL), HttpStatus.OK);
}
@Transactional
@GetMapping("enable/{userID}")
public ResponseEntity<?> enableUser(@PathVariable("userID") Integer userID) throws GeneralException {
Users user = userRepo.findById(userID);
user.setEnabled(true);
userRepo.save(user);
return new ResponseEntity<ResponseCode>(new ResponseCode(Errors.SUCCESSFUL), HttpStatus.OK);
}
@GetMapping("groups/{userID}")
public List<Groups> getUsersGroup(@Valid @PathVariable("userID") Integer userID) {
List<Groups> usergroupsList = userGroupsRepo.findGroupsOfUser(userID);
return usergroupsList;
}
@GetMapping("roles/{userID}")
public List<Roles> getUsersRole(@Valid @PathVariable("userID") Integer userID) {
List<Roles> userRoles = usersRolesRepo.getUserRoles(userID);
return userRoles;
}
private void createGroups(Users user, List<Integer> groups) throws GeneralException {
try {
if (groups != null)
for (Integer group : groups) {
Usergroups ug = new Usergroups();
ug.setGroupID(new Groups(group));
ug.setUserID(user);
userGroupsRepo.save(ug);
ug = null;
}
} catch (Exception e) {
log.error("Error Creating user groups: " + user.getUserID() + ", error: " + e);
e.printStackTrace();
throw new GeneralException(Errors.USER_CREATED_GROUPS_FAILED.getCode(),
Errors.USER_CREATED_GROUPS_FAILED.getDesc() + ", exception: " + e);
}
}
private void createRoles(Users user, List<Integer> roles) throws GeneralException {
try {
if (roles != null)
for (Integer role : roles) {
Userroles ur = new Userroles();
ur.setRoleID(new Roles(role));
ur.setUserID(user);
usersRolesRepo.save(ur);
ur = null;
}
} catch (Exception e) {
log.error("Error Creating user roles: " + user.getUserID() + ", error: " + e);
e.printStackTrace();
throw new GeneralException(Errors.USER_CREATED_ROLES_FAILED.getCode(),
Errors.USER_CREATED_ROLES_FAILED.getDesc() + ", exception: " + e);
}
}
private void deleteRoles(Users userID) throws GeneralException {
try {
usersRolesRepo.deleteByUserID(userID);
} catch (Exception e) {
log.error("Error Deleting user roles: " + userID + ", error: " + e);
e.printStackTrace();
throw new GeneralException(Errors.USER_DELETE_ROLES_FAILED.getCode(),
Errors.USER_DELETE_ROLES_FAILED.getDesc() + ", exception: " + e);
}
}
private void deleteGroups(Users userID) throws GeneralException {
try {
userGroupsRepo.deleteByUserID(userID);
} catch (Exception e) {
log.error("Error Deleting user Groups: " + userID + ", error: " + e);
e.printStackTrace();
throw new GeneralException(Errors.USER_DELETE_GROUPS_FAILED.getCode(),
Errors.USER_DELETE_GROUPS_FAILED.getDesc() + ", exception: " + e);
}
}
@GetMapping("id/{userID}")
public ResponseEntity<Users> getUserbyId(@Valid @PathVariable("userID") Integer userID) {
Users user = userRepo.findById(userID);
if (user != null) {
return ResponseEntity.ok(user);
} else
return ResponseEntity.noContent().build();
}
}
package com.sh.crm.security.config;
import com.sh.crm.security.service.JwtUserDetailsServiceImpl;
import com.sh.crm.services.UserServices;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.stereotype.Component;
@Component
public class CustomAuthenticationProvider implements AuthenticationProvider {
private final static Logger log = LoggerFactory.getLogger(CustomAuthenticationProvider.class);
@Autowired
private UserServices userServices;
@Autowired
private JwtUserDetailsServiceImpl userDetailsService;
@Override
public Authentication authenticate(Authentication auth)
throws AuthenticationException {
log.info("Authenticating user:" + auth.getName(), " check Database first");
String username = auth.getName();
String password = auth.getCredentials().toString();
userServices.validateCredentials(username, password);
return new UsernamePasswordAuthenticationToken(username, password, userDetailsService.getUserGrantedAuth(username));
}
@Override
public boolean supports(Class<?> auth) {
return auth.equals(UsernamePasswordAuthenticationToken.class);
}
}
package com.sh.crm.security.config;
import com.sh.crm.security.service.JwtUserDetailsServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ldap.core.DirContextOperations;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator;
import org.springframework.stereotype.Component;
import java.util.Collection;
@Component
public class CustomLdapAuthoritiesPopulator implements LdapAuthoritiesPopulator {
@Autowired
private JwtUserDetailsServiceImpl userDetailsService;
private Logger log = LoggerFactory.getLogger(CustomLdapAuthoritiesPopulator.class);
@Override
public Collection<? extends GrantedAuthority> getGrantedAuthorities(
DirContextOperations userData, String username) {
log.debug("Loading LDAP user roles, username: " + username);
if (username.indexOf('@') != -1) {
username = username.substring(0, username.indexOf('@') - 1);
}
return userDetailsService.getUserGrantedAuth(username);
}
}
package com.sh.crm.security.config;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Component
public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request,
HttpServletResponse response,
AuthenticationException authException) throws IOException {
// This is invoked when user tries to access a secured REST resource without supplying any credentials
// We should just send a 401 Unauthorized response because there is no 'login page' to redirect to
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized");
}
}
package com.sh.crm.security.config;
import com.sh.crm.security.service.JwtUserDetailsServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ldap.core.DirContextAdapter;
import org.springframework.ldap.core.DirContextOperations;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.ldap.userdetails.LdapUserDetailsMapper;
import org.springframework.stereotype.Component;
import java.util.Collection;
@Component
public class LDAPUserDetailsMapper extends LdapUserDetailsMapper {
private final Logger log = LoggerFactory.getLogger(LDAPUserDetailsMapper.class);
@Autowired
private JwtUserDetailsServiceImpl userDetailsService;
public UserDetails mapUserFromContext(DirContextOperations ctx, String username, Collection<? extends GrantedAuthority> authorities) {
log.debug("Loading LDAP user details for user: " + username);
return userDetailsService.loadUserByUsername(username);
}
@Override
public void mapUserToContext(UserDetails user, DirContextAdapter ctx) {
}
}
package com.sh.crm.security.config;
import com.sh.crm.config.SpringSecurityAuditorAware;
import com.sh.crm.security.filter.JwtAuthenticationTokenFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.CorsConfigurationSource;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@SuppressWarnings("SpringJavaAutowiringInspection")
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private JwtAuthenticationEntryPoint unauthorizedHandler;
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private AuthenticationProvider databaseProvider;
@Autowired
private LDAPUserDetailsMapper ldapUserDetailsMapper;
@Value("${ldap.domain}")
private String AD_DOMAIN;
@Value("${ldap.url}")
private String AD_URL;
@Bean
public AuditorAware<String> auditorProvider() {
return new SpringSecurityAuditorAware();
}
@Autowired
public void configureAuthentication(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
//authenticationManagerBuilder.userDetailsService(this.userDetailsService).passwordEncoder(passwordEncoder());
authenticationManagerBuilder.authenticationProvider(databaseProvider);
// authenticationManagerBuilder.authenticationProvider(activeDirectoryLdapAuthenticationProvider());
}
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("*");
}
};
}
public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
ActiveDirectoryLdapAuthenticationProvider provider =
new ActiveDirectoryLdapAuthenticationProvider(AD_DOMAIN, AD_URL);
provider.setConvertSubErrorCodesToExceptions(false);
provider.setUseAuthenticationRequestCredentials(true);
provider.setUserDetailsContextMapper(ldapUserDetailsMapper);
return provider;
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public JwtAuthenticationTokenFilter authenticationTokenFilterBean() throws Exception {
return new JwtAuthenticationTokenFilter();
}
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.csrf().disable()
.exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.authorizeRequests().antMatchers("/auth/**","/metrics/**").permitAll().antMatchers(HttpMethod.OPTIONS, "/**")
.permitAll().anyRequest().authenticated();
// Custom JWT based security filter
httpSecurity.addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class);
// disable page caching
httpSecurity.headers().cacheControl();
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers(HttpMethod.OPTIONS, "/**");
}
@Bean
CorsConfigurationSource corsConfigurationSource() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", new CorsConfiguration().applyPermitDefaultValues());
return source;
}
}
package com.sh.crm.security.controller;
import com.sh.crm.security.model.JwtAuthenticationRequest;
import com.sh.crm.security.model.JwtUser;
import com.sh.crm.security.service.JwtAuthenticationResponse;
import com.sh.crm.security.util.JwtTokenUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.mobile.device.Device;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@RestController
public class AuthenticationRestController {
private static final Logger log = LoggerFactory.getLogger(AuthenticationRestController.class);
@Value("${jwt.header}")
private String tokenHeader;
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private JwtTokenUtil jwtTokenUtil;
@Autowired
private UserDetailsService userDetailsService;
@RequestMapping(value = "${jwt.route.authentication.path}", method = RequestMethod.POST)
public ResponseEntity<?> createAuthenticationToken(@RequestBody JwtAuthenticationRequest authenticationRequest, Device device) throws AuthenticationException {
log.debug(" >>>>>>>> Authentication Request <<<<<<<<<<< ");
final Authentication authentication = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(
authenticationRequest.getUsername(),
authenticationRequest.getPassword()
)
);
SecurityContextHolder.getContext().setAuthentication(authentication);
// Reload password post-security so we can generate token
final JwtUser userDetails = (JwtUser) userDetailsService.loadUserByUsername(authenticationRequest.getUsername());
final String token = jwtTokenUtil.generateToken(userDetails, device);
// Return the token
return ResponseEntity.ok(new JwtAuthenticationResponse(token, userDetails));
}
@RequestMapping(value = "${jwt.route.authentication.refresh}", method = RequestMethod.GET, consumes = "application/json")
public ResponseEntity<?> refreshAndGetAuthenticationToken(HttpServletRequest request) {
log.debug(" >>>>>>>> Token refresh Request <<<<<<<<<<< ");
String token = request.getHeader(tokenHeader);
if (token != null && token.startsWith("Bearer ")) {
token = token.substring(7);
}
String username = jwtTokenUtil.getUsernameFromToken(token);
log.info("Username found: " + username);
JwtUser user = (JwtUser) userDetailsService.loadUserByUsername(username);
if (jwtTokenUtil.canTokenBeRefreshed(token, java.util.Calendar.getInstance().getTime())) {
String refreshedToken = jwtTokenUtil.refreshToken(token);
return ResponseEntity.ok(new JwtAuthenticationResponse(refreshedToken, user));
} else {
return ResponseEntity.badRequest().body(null);
}
}
}
package com.sh.crm.security.filter;
import com.sh.crm.security.util.JwtTokenUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
private final Log logger = LogFactory.getLog(this.getClass());
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private JwtTokenUtil jwtTokenUtil;
@Value("${jwt.header}")
private String tokenHeader;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
String authToken = request.getHeader(this.tokenHeader);
// authToken.startsWith("Bearer ")
// String authToken = header.substring(7);
if (authToken != null && authToken.startsWith("Bearer ")) {
authToken = authToken.substring(7);
}
String username = jwtTokenUtil.getUsernameFromToken(authToken);
logger.info("checking authentication for user " + username);
if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
UserDetails userDetails = this.userDetailsService.loadUserByUsername(username);
if (jwtTokenUtil.validateToken(authToken, userDetails)) {
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
logger.info("authenticated user " + username + ", setting security context");
SecurityContextHolder.getContext().setAuthentication(authentication);
}
}
chain.doFilter(request, response);
}
}
package com.sh.crm.security.model;
import org.springframework.security.core.GrantedAuthority;
public class CustomAuthority implements GrantedAuthority {
String authority;
public CustomAuthority() {
}
public CustomAuthority(String authority) {
this.authority = authority;
}
@Override
public String getAuthority() {
return authority;
}
public void setAuthority(String authority) {
this.authority = authority;
}
}
package com.sh.crm.security.model;
/**
* This class used as a skeleton class for authentication requests
*/
public class JwtAuthenticationRequest {
private String username;
private String password;
public JwtAuthenticationRequest() {
super();
}
public JwtAuthenticationRequest(String username, String password) {
this.setUsername(username);
this.setPassword(password);
}
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
}
package com.sh.crm.security.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.Collection;
import java.util.Date;
public class JwtUser implements UserDetails {
private static final long serialVersionUID = 1L;
private final Integer id;
private final String username;
private final String firstname;
private final String lastname;
private final String password;
private final String email;
private final Collection<? extends GrantedAuthority> authorities;
private final Boolean enabled;
public JwtUser(
Integer id,
String username,
String firstname,
String lastname,
String email,
String password, Collection<? extends GrantedAuthority> authorities,
Boolean enabled
) {
this.id = id;
this.username = username;
this.firstname = firstname;
this.lastname = lastname;
this.email = email;
this.password = password;
this.authorities = authorities;
this.enabled = enabled;
}
@JsonIgnore
public Integer getId() {
return id;
}
@Override
public String getUsername() {
return username;
}
@JsonIgnore
@Override
public boolean isAccountNonExpired() {
return true;
}
@JsonIgnore
@Override
public boolean isAccountNonLocked() {
return true;
}
@JsonIgnore
@Override
public boolean isCredentialsNonExpired() {
return true;
}
public String getFirstname() {
return firstname;
}
public String getLastname() {
return lastname;
}
public String getEmail() {
return email;
}
@JsonIgnore
@Override
public String getPassword() {
return password;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return authorities;
}
@Override
public boolean isEnabled() {
return enabled;
}
}
package com.sh.crm.security.service;
import com.sh.crm.security.model.JwtUser;
;
import java.io.Serializable;
public class JwtAuthenticationResponse implements Serializable {
private static final long serialVersionUID = 1L;
private final String token;
private JwtUser user;
public JwtAuthenticationResponse(String token) {
this.token = token;
}
public JwtAuthenticationResponse(String token, JwtUser user) {
super();
this.token = token;
this.user = user;
}
public String getToken() {
return this.token;
}
public JwtUser getUser() {
return user;
}
public void setUser(JwtUser user) {
this.user = user;
}
}
package com.sh.crm.security.service;
import com.sh.crm.jpa.entities.Permissions;
import com.sh.crm.jpa.entities.Users;
import com.sh.crm.jpa.repos.PermissionsRepo;
import com.sh.crm.jpa.repos.UsersRepos;
import com.sh.crm.security.model.CustomAuthority;
import com.sh.crm.security.util.JwtUserFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@Service
public class JwtUserDetailsServiceImpl implements UserDetailsService {
private static final Logger logger = LoggerFactory.getLogger(JwtUserDetailsServiceImpl.class);
@Autowired
private UsersRepos userRepository;
@Autowired
private PermissionsRepo permissionsRepo;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Users user = userRepository.findByUserID(username);
if (user == null) {
if (logger.isErrorEnabled())
logger.info("User: " + username + " not found");
throw new UsernameNotFoundException(String.format("No user found with username '%s'.", username));
} else {
if (logger.isDebugEnabled())
logger.debug("User :" + username + " found, loading information");
return JwtUserFactory.create(user, getUserAuthorities(user.getId()));
}
}
private List<Permissions> getUserAuthorities(Integer id) {
List<Permissions> userAuthorities = permissionsRepo.usersPermission(id);
if (logger.isDebugEnabled())
logger.debug("User Authorities loaded: " + userAuthorities);
return userAuthorities;
}
public Set<CustomAuthority> getUserGrantedAuth(String username) {
Users user = userRepository.findByUserID(username);
List<Permissions> allAuth = getUserAuthorities(user.getId());
Set<CustomAuthority> activeAuth = new HashSet<>();
if (allAuth != null) {
for (Permissions auth : allAuth) {
activeAuth.add(new CustomAuthority(auth.getPermission()));
}
}
allAuth = null;
return activeAuth;
}
}
package com.sh.crm.security.util;
import com.sh.crm.security.model.JwtUser;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mobile.device.Device;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Component
public class JwtTokenUtil {
static final String CLAIM_KEY_USERNAME = "sub";
static final String CLAIM_KEY_AUDIENCE = "audience";
static final String CLAIM_KEY_CREATED = "created";
private static final String AUDIENCE_UNKNOWN = "unknown";
private static final String AUDIENCE_WEB = "web";
private static final String AUDIENCE_MOBILE = "mobile";
private static final String AUDIENCE_TABLET = "tablet";
@Value("${jwt.secret}")
private String secret;
@Value("${jwt.expiration}")
private Long expiration;
public String getUsernameFromToken(String token) {
String username;
try {
final Claims claims = getClaimsFromToken(token);
username = claims.getSubject();
} catch (Exception e) {
username = null;
}
return username;
}
public Date getCreatedDateFromToken(String token) {
Date created;
try {
final Claims claims = getClaimsFromToken(token);
created = new Date((Long) claims.get(CLAIM_KEY_CREATED));
} catch (Exception e) {
created = null;
}
return created;
}
public Date getExpirationDateFromToken(String token) {
Date expiration;
try {
final Claims claims = getClaimsFromToken(token);
expiration = claims.getExpiration();
} catch (Exception e) {
expiration = null;
}
return expiration;
}
public String getAudienceFromToken(String token) {
String audience;
try {
final Claims claims = getClaimsFromToken(token);
audience = (String) claims.get(CLAIM_KEY_AUDIENCE);
} catch (Exception e) {
audience = null;
}
return audience;
}
private Claims getClaimsFromToken(String token) {
Claims claims;
try {
claims = Jwts.parser()
.setSigningKey(secret)
.parseClaimsJws(token)
.getBody();
} catch (Exception e) {
claims = null;
}
return claims;
}
private Date generateExpirationDate() {
return new Date(System.currentTimeMillis() + expiration * 1000);
}
private Boolean isTokenExpired(String token) {
final Date expiration = getExpirationDateFromToken(token);
return expiration.before(new Date());
}
private Boolean isCreatedBeforeLastPasswordReset(Date created, Date lastPasswordReset) {
return (lastPasswordReset != null && created.before(lastPasswordReset));
}
private String generateAudience(Device device) {
String audience = AUDIENCE_UNKNOWN;
if (device.isNormal()) {
audience = AUDIENCE_WEB;
} else if (device.isTablet()) {
audience = AUDIENCE_TABLET;
} else if (device.isMobile()) {
audience = AUDIENCE_MOBILE;
}
return audience;
}
private Boolean ignoreTokenExpiration(String token) {
String audience = getAudienceFromToken(token);
return (AUDIENCE_TABLET.equals(audience) || AUDIENCE_MOBILE.equals(audience));
}
public String generateToken(UserDetails userDetails, Device device) {
Map<String, Object> claims = new HashMap<>();
claims.put(CLAIM_KEY_USERNAME, userDetails.getUsername());
claims.put(CLAIM_KEY_AUDIENCE, generateAudience(device));
claims.put(CLAIM_KEY_CREATED, new Date());
return generateToken(claims);
}
String generateToken(Map<String, Object> claims) {
return Jwts.builder()
.setClaims(claims)
.setExpiration(generateExpirationDate())
.signWith(SignatureAlgorithm.HS512, secret)
.compact();
}
public Boolean canTokenBeRefreshed(String token, Date lastPasswordReset) {
final Date created = getCreatedDateFromToken(token);
return !isCreatedBeforeLastPasswordReset(created, lastPasswordReset)
&& (!isTokenExpired(token) || ignoreTokenExpiration(token));
}
public String refreshToken(String token) {
String refreshedToken;
try {
final Claims claims = getClaimsFromToken(token);
claims.put(CLAIM_KEY_CREATED, new Date());
refreshedToken = generateToken(claims);
} catch (Exception e) {
refreshedToken = null;
}
return refreshedToken;
}
public Boolean validateToken(String token, UserDetails userDetails) {
JwtUser user = (JwtUser) userDetails;
final String username = getUsernameFromToken(token);
final Date created = getCreatedDateFromToken(token);
//final Date expiration = getExpirationDateFromToken(token);
return (
username.equals(user.getUsername())
&& !isTokenExpired(token)
&& !isCreatedBeforeLastPasswordReset(created, null));
}
}
package com.sh.crm.security.util;
import com.sh.crm.jpa.entities.Permissions;
import com.sh.crm.jpa.entities.Users;
import com.sh.crm.security.model.JwtUser;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
public final class JwtUserFactory {
private JwtUserFactory() {
}
public static JwtUser create(Users user, List<Permissions> authList) {
return new JwtUser(user.getId(), user.getUserID(), user.getFirstName(), user.getLastName(), user.getEmail(),
user.getPassword(), mapToGrantedAuthorities(authList), user.getEnabled());
}
private static List<GrantedAuthority> mapToGrantedAuthorities(List<Permissions> authorities) {
return authorities.stream().map(authority -> new SimpleGrantedAuthority(authority.getPermission()))
.collect(Collectors.toList());
}
}
package com.sh.crm.security.util;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Component;
import java.util.Scanner;
@Component
public class QuickPasswordGenerator {
public static void main(String[] args) {
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
System.out.print("Please enter the password:");
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()) {
System.out.println(String.format("%s", passwordEncoder.encode(scanner.nextLine())));
}
}
}
package com.sh.crm.services;
import com.sh.crm.jpa.repos.PermissionsRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class PermissionsServices {
@Autowired
private PermissionsRepo permissionsRepo;
}
package com.sh.crm.services;
import com.sh.crm.jpa.entities.Users;
import com.sh.crm.jpa.repos.UsersRepos;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
@Service
public class UserServices {
@Autowired
private UsersRepos usersRepos;
public void validateCredentials(String username, String password) throws BadCredentialsException {
Users user = usersRepos.findByUserIDAndEnabledAndLDAPUser(username, true, false);
if (user == null) {
throw new BadCredentialsException("Invalid username or user is disabled");
}
if (!passwordEncoder().matches(password, user.getPassword())) {
throw new BadCredentialsException("Invalid username or password");
}
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
package com.sh.crm;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MiniCrmWithTicketingModuleApplication.class);
}
}
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=BAJTicketingOLD
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.password=Bajipcc01
spring.datasource.username=sa
spring.datasource.type = com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=100
spring.datasource.hikari.idle-timeout=300000
spring.datasource.hikari.max-lifetime=1200000
spring.datasource.hikari.auto-commit=true
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect
spring.jpa.properties.hibernate.id.new_generator_mappings=false
#show sql values
logging.level.org.hibernate.type.descriptor.sql=trace
#spring.jpa.properties.hibernate.format_sql=true
#spring.jpa.properties.hibernate.show_sql=true
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
### JWT ###
jwt.header= Authorization
jwt.secret=BAJTicketing-SECRET2017$122#@wtvb53s$5#5ba!221%fdkserjvnaw
jwt.expiration=28800
jwt.route.authentication.path=auth
jwt.route.authentication.refresh=refresh
ldap.url=ldap://10.250.26.15:389
ldap.domain=bajdom.baj
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment