springmvc-scaffold 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +4 -0
  5. data/Gemfile.lock +45 -0
  6. data/README.markdown +31 -0
  7. data/Rakefile +9 -0
  8. data/bin/springmvc +7 -0
  9. data/lib/springmvc-scaffold.rb +14 -0
  10. data/lib/springmvc-scaffold/configuration.rb +50 -0
  11. data/lib/springmvc-scaffold/execution.rb +20 -0
  12. data/lib/springmvc-scaffold/generators/app/app_generator.rb +123 -0
  13. data/lib/springmvc-scaffold/generators/app/dependencies.rb +26 -0
  14. data/lib/springmvc-scaffold/generators/app/dependency.rb +15 -0
  15. data/lib/springmvc-scaffold/generators/app/templates/build.gradle.erb +56 -0
  16. data/lib/springmvc-scaffold/generators/app/templates/models/Entity.erb +46 -0
  17. data/lib/springmvc-scaffold/generators/app/templates/orm/Repository-hibernate.java.tt +51 -0
  18. data/lib/springmvc-scaffold/generators/app/templates/orm/Repository-jpa.java.tt +49 -0
  19. data/lib/springmvc-scaffold/generators/app/templates/pom.erb +95 -0
  20. data/lib/springmvc-scaffold/generators/app/templates/resources/hibernate.properties +16 -0
  21. data/lib/springmvc-scaffold/generators/app/templates/resources/log4j.properties +4 -0
  22. data/lib/springmvc-scaffold/generators/app/templates/resources/messages.properties +0 -0
  23. data/lib/springmvc-scaffold/generators/app/templates/springmvc-scaffold.erb +6 -0
  24. data/lib/springmvc-scaffold/generators/app/templates/webapp/.bowerrc +3 -0
  25. data/lib/springmvc-scaffold/generators/app/templates/webapp/WEB-INF/jsp/decorators/main.jsp +15 -0
  26. data/lib/springmvc-scaffold/generators/app/templates/webapp/WEB-INF/jsp/prelude.jspf +4 -0
  27. data/lib/springmvc-scaffold/generators/app/templates/webapp/WEB-INF/sitemesh3.xml +3 -0
  28. data/lib/springmvc-scaffold/generators/app/templates/webapp/WEB-INF/spring-servlet.xml.tt +42 -0
  29. data/lib/springmvc-scaffold/generators/app/templates/webapp/WEB-INF/web.xml.tt +52 -0
  30. data/lib/springmvc-scaffold/generators/app/templates/webapp/bower.json.tt +7 -0
  31. data/lib/springmvc-scaffold/generators/app/templates/webapp/stylesheets/application.css +38 -0
  32. data/lib/springmvc-scaffold/generators/base.rb +17 -0
  33. data/lib/springmvc-scaffold/generators/scaffold/attribute.rb +68 -0
  34. data/lib/springmvc-scaffold/generators/scaffold/base_scaffold.rb +54 -0
  35. data/lib/springmvc-scaffold/generators/scaffold/controller/controller_generator.rb +20 -0
  36. data/lib/springmvc-scaffold/generators/scaffold/controller/templates/controller.erb +126 -0
  37. data/lib/springmvc-scaffold/generators/scaffold/controller/templates/controller_test.erb +13 -0
  38. data/lib/springmvc-scaffold/generators/scaffold/imports.rb +18 -0
  39. data/lib/springmvc-scaffold/generators/scaffold/jsp/jsp_generator.rb +40 -0
  40. data/lib/springmvc-scaffold/generators/scaffold/jsp/templates/edit.erb +15 -0
  41. data/lib/springmvc-scaffold/generators/scaffold/jsp/templates/form.erb +14 -0
  42. data/lib/springmvc-scaffold/generators/scaffold/jsp/templates/index.erb +38 -0
  43. data/lib/springmvc-scaffold/generators/scaffold/jsp/templates/new.erb +14 -0
  44. data/lib/springmvc-scaffold/generators/scaffold/jsp/templates/show.erb +16 -0
  45. data/lib/springmvc-scaffold/generators/scaffold/model/model_generator.rb +16 -0
  46. data/lib/springmvc-scaffold/generators/scaffold/model/templates/model.erb +22 -0
  47. data/lib/springmvc-scaffold/generators/scaffold/model/templates/model_test.erb +13 -0
  48. data/lib/springmvc-scaffold/generators/scaffold/repository/repository_generator.rb +30 -0
  49. data/lib/springmvc-scaffold/generators/scaffold/repository/templates/repository.erb +18 -0
  50. data/lib/springmvc-scaffold/generators/scaffold/repository/templates/repository_test.erb +13 -0
  51. data/lib/springmvc-scaffold/generators/scaffold/scaffold_generator.rb +31 -0
  52. data/lib/springmvc-scaffold/runner.rb +7 -0
  53. data/lib/springmvc-scaffold/runner/commands_help.rb +11 -0
  54. data/lib/springmvc-scaffold/runner/generator.rb +14 -0
  55. data/lib/springmvc-scaffold/runner/help.rb +10 -0
  56. data/lib/springmvc-scaffold/runner/scaffold.rb +15 -0
  57. data/lib/springmvc-scaffold/version.rb +3 -0
  58. data/spec/spec_helper.rb +23 -0
  59. data/spec/springmvc-scaffold/configuration_spec.rb +124 -0
  60. data/spec/springmvc-scaffold/execution_spec.rb +40 -0
  61. data/spec/springmvc-scaffold/generators/app/app_generator_spec.rb +226 -0
  62. data/spec/springmvc-scaffold/generators/app/dependency_spec.rb +14 -0
  63. data/spec/springmvc-scaffold/generators/app/templates/Entity.java +46 -0
  64. data/spec/springmvc-scaffold/generators/app/templates/RepositoryJPA.java +49 -0
  65. data/spec/springmvc-scaffold/generators/app/templates/build.gradle +59 -0
  66. data/spec/springmvc-scaffold/generators/app/templates/pom.xml +146 -0
  67. data/spec/springmvc-scaffold/generators/app/templates/springmvc-scaffold.properties +6 -0
  68. data/spec/springmvc-scaffold/generators/scaffold/attribute_spec.rb +215 -0
  69. data/spec/springmvc-scaffold/generators/scaffold/base_scaffold_spec.rb +70 -0
  70. data/spec/springmvc-scaffold/generators/scaffold/controller/controller_generator_spec.rb +53 -0
  71. data/spec/springmvc-scaffold/generators/scaffold/controller/templates/ProductsController.java +97 -0
  72. data/spec/springmvc-scaffold/generators/scaffold/imports_spec.rb +9 -0
  73. data/spec/springmvc-scaffold/generators/scaffold/jsp/jsp_generator_spec.rb +46 -0
  74. data/spec/springmvc-scaffold/generators/scaffold/jsp/templates/form.jsp +25 -0
  75. data/spec/springmvc-scaffold/generators/scaffold/model/model_generator_spec.rb +28 -0
  76. data/spec/springmvc-scaffold/generators/scaffold/model/templates/Product.java +43 -0
  77. data/spec/springmvc-scaffold/generators/scaffold/repository/repository_generator_spec.rb +49 -0
  78. data/spec/springmvc-scaffold/generators/scaffold/repository/templates/Clients.java +16 -0
  79. data/spec/springmvc-scaffold/generators/scaffold/repository/templates/Products.java +10 -0
  80. data/spec/springmvc-scaffold/generators/scaffold/scaffold_generator_spec.rb +60 -0
  81. data/spec/springmvc-scaffold/runner/commands_help_spec.rb +13 -0
  82. data/spec/springmvc-scaffold/runner/generator_spec.rb +21 -0
  83. data/spec/springmvc-scaffold/runner/help_spec.rb +22 -0
  84. data/spec/springmvc-scaffold/runner/scaffold_spec.rb +36 -0
  85. data/spec/springmvc-scaffold_spec.rb +4 -0
  86. data/springmvc-scaffold.gemspec +27 -0
  87. metadata +185 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7b49d05d6b591d247eecc7646a1b5edc6dccb0be
4
+ data.tar.gz: 6239e151ab4cc73d4e18c025a1bede002b2e081c
5
+ SHA512:
6
+ metadata.gz: dc7eb856ee2842291d2f7d8e096af28924adb1eb370c39c41d42e5eb9d6dc2c54f404b362a83572b4c83d8fd5d4ee5deec5c0c9c3f9ae2c762b443954d71ef46
7
+ data.tar.gz: 6a58adf5b144eb4a3b91ce8a627d37fd1c52a2d3fe65bc5873b873460320833fa8d0b7da4357161b762cffa8ae250d79710498a8ad8839ce5a122848c5434698
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --warnings
3
+ --require spec_helper
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.2
4
+
5
+ notifications:
6
+ recipients:
7
+ - von.juliano@gmail.com
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ ruby '2.1.2'
4
+ gemspec
@@ -0,0 +1,45 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ springmvc-scaffold (1.0.0)
5
+ activesupport (= 4.1.8)
6
+ rake (= 10.1.0)
7
+ thor (= 0.19.1)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ activesupport (4.1.8)
13
+ i18n (~> 0.6, >= 0.6.9)
14
+ json (~> 1.7, >= 1.7.7)
15
+ minitest (~> 5.1)
16
+ thread_safe (~> 0.1)
17
+ tzinfo (~> 1.1)
18
+ diff-lcs (1.2.5)
19
+ i18n (0.6.11)
20
+ json (1.8.1)
21
+ minitest (5.4.3)
22
+ rake (10.1.0)
23
+ rspec (3.1.0)
24
+ rspec-core (~> 3.1.0)
25
+ rspec-expectations (~> 3.1.0)
26
+ rspec-mocks (~> 3.1.0)
27
+ rspec-core (3.1.7)
28
+ rspec-support (~> 3.1.0)
29
+ rspec-expectations (3.1.2)
30
+ diff-lcs (>= 1.2.0, < 2.0)
31
+ rspec-support (~> 3.1.0)
32
+ rspec-mocks (3.1.3)
33
+ rspec-support (~> 3.1.0)
34
+ rspec-support (3.1.2)
35
+ thor (0.19.1)
36
+ thread_safe (0.3.4)
37
+ tzinfo (1.2.2)
38
+ thread_safe (~> 0.1)
39
+
40
+ PLATFORMS
41
+ ruby
42
+
43
+ DEPENDENCIES
44
+ rspec (= 3.1.0)
45
+ springmvc-scaffold!
@@ -0,0 +1,31 @@
1
+ # Spring MVC Scaffold [![Build Status](https://travis-ci.org/juliano/springmvc-scaffold.svg?branch=master)](https://travis-ci.org/juliano/springmvc-scaffold)
2
+
3
+ Tool to make it easier configuring new Spring MVC projects.
4
+
5
+ # Installation
6
+
7
+ gem install springmvc-scaffold
8
+
9
+ # Getting Started
10
+
11
+ At the command line client:
12
+
13
+ springmvc new myproject
14
+ cd myproject
15
+ springmvc scaffold product name:string value:double
16
+ mvn jetty:run
17
+
18
+ open http://localhost:8080/products
19
+
20
+ ## Note on Patches/Pull Requests
21
+
22
+ * Fork the project.
23
+ * Make your feature addition or bug fix.
24
+ * Add tests for it. This is important so I don't break it in a
25
+ future version unintentionally.
26
+ * Commit, do not mess with rakefile, version, or history.
27
+ * Send me a pull request. Bonus points for topic branches.
28
+
29
+ ## Author
30
+
31
+ Spring MVC Scaffold was created and is maintained by [Juliano Alves](http://twitter.com/vonjuliano).
@@ -0,0 +1,9 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rspec/core/rake_task'
4
+ RSpec::Core::RakeTask.new(:spec) do |t|
5
+ t.rspec_opts = ["-c", "-f progress", "-r ./spec/spec_helper.rb"]
6
+ t.pattern = 'spec/**/*_spec.rb'
7
+ end
8
+
9
+ task default: [:spec]
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../lib/springmvc-scaffold'
4
+
5
+ begin
6
+ SpringMvcScaffold::Execution.new.run(ARGV.dup)
7
+ end
@@ -0,0 +1,14 @@
1
+ module SpringMvcScaffold
2
+ end
3
+
4
+ require 'rubygems'
5
+
6
+ require "thor/actions"
7
+ require "thor/group"
8
+ require 'active_support/inflector'
9
+ require 'yaml'
10
+
11
+ require 'springmvc-scaffold/runner'
12
+ require 'springmvc-scaffold/execution'
13
+ require 'springmvc-scaffold/configuration'
14
+ require 'springmvc-scaffold/generators/base'
@@ -0,0 +1,50 @@
1
+ class Configuration
2
+ MAIN_SRC = "src/main/java"
3
+ WEB_APP = "src/main/webapp"
4
+ WEB_INF = "#{WEB_APP}/WEB-INF"
5
+ MAIN_RESOURCES = "src/main/resources"
6
+ META_INF = "#{WEB_APP}/META-INF"
7
+ TEST_SRC = "src/test/java"
8
+ TEST_RESOURCES = "src/test/resources"
9
+ FILENAME = "#{META_INF}/springmvc-scaffold.properties"
10
+
11
+ def self.config
12
+ YAML.load_file FILENAME
13
+ end
14
+
15
+ def self.package
16
+ config["package"] ? config["package"] : 'app'
17
+ end
18
+
19
+ def self.models_package
20
+ config["models_package"] ? config["models_package"] : 'models'
21
+ end
22
+
23
+ def self.controllers_package
24
+ config["controllers_package"] ? config["controllers_package"] : 'controllers'
25
+ end
26
+
27
+ def self.repositories_package
28
+ config["repositories_package"] ? config["repositories_package"] : 'repositories'
29
+ end
30
+
31
+ def self.full_models_package
32
+ "#{package}.#{models_package}"
33
+ end
34
+
35
+ def self.orm
36
+ config["orm"] ? config["orm"] : 'jpa'
37
+ end
38
+
39
+ def self.hibernate?
40
+ orm.eql? "hibernate"
41
+ end
42
+
43
+ def self.main_class_path(*path)
44
+ File.join(MAIN_SRC, package.gsub(".", File::Separator), path)
45
+ end
46
+
47
+ def self.test_class_path(*path)
48
+ File.join(TEST_SRC, package.gsub(".", File::Separator), path)
49
+ end
50
+ end
@@ -0,0 +1,20 @@
1
+ module SpringMvcScaffold
2
+
3
+ class Execution
4
+ def run(args)
5
+ action = args.shift
6
+ runner_for(action).new.run(args)
7
+ end
8
+
9
+ def runner_for(action)
10
+ SpringMvcScaffold::COMMANDS.fetch(action, Runner::CommandsHelp)
11
+ end
12
+ end
13
+
14
+ COMMANDS = {
15
+ "--help" => Runner::Generator,
16
+ "-h" => Runner::Generator,
17
+ "new" => Runner::Generator,
18
+ "scaffold" => Runner::Scaffold
19
+ }
20
+ end
@@ -0,0 +1,123 @@
1
+ class AppGenerator < SpringMvcScaffold::Base
2
+
3
+ BUILD_TOOLS = %w( mvn gradle )
4
+ ORMS = %w( jpa hibernate)
5
+
6
+ argument :project_path
7
+
8
+ class_option :package, default: "app", aliases: "-p", desc: "Define base package"
9
+
10
+ class_option :controllers_package, aliases: "-c", default: "controllers", desc: "Define controllers package"
11
+
12
+ class_option :models_package, aliases: "-m", default: "models", desc: "Define models package"
13
+
14
+ class_option :repositories_package, aliases: "-r", default: "repositories", desc: "Define repositories package"
15
+
16
+ class_option :build_tool, aliases: "-b", default: "mvn", desc: "Build tools (options: #{BUILD_TOOLS.join(', ')})"
17
+
18
+ class_option :orm, aliases: "-o", default: "jpa", desc: "Object-relational mapping (options: #{ORMS.join(', ')})"
19
+
20
+ def self.source_root
21
+ File.join(File.dirname(__FILE__), "templates")
22
+ end
23
+
24
+ def self.banner
25
+ "springmvc new #{self.arguments.map(&:usage).join(' ')} [options]"
26
+ end
27
+
28
+ def initialize(args, opts=[])
29
+ super([args], opts)
30
+ validate
31
+ self.destination_root = project_path
32
+ @project_name = project_path.split("/").last
33
+ end
34
+
35
+ def create_root_folder
36
+ empty_directory "."
37
+ end
38
+
39
+ def configure_maven
40
+ template("pom.erb", "pom.xml") if build_tool == "mvn"
41
+ end
42
+
43
+ def configure_gradle
44
+ template("build.gradle.erb", "build.gradle") if build_tool == "gradle"
45
+ end
46
+
47
+ def create_main_java
48
+ empty_directory Configuration::MAIN_SRC
49
+ @src = File.join(Configuration::MAIN_SRC, options[:package].gsub(".", File::Separator))
50
+ end
51
+
52
+ def create_controllers_directory
53
+ empty_directory File.join(@src, options[:controllers_package])
54
+ end
55
+
56
+ def create_models_directory
57
+ models = File.join(@src, options[:models_package])
58
+ empty_directory models
59
+ template("models/Entity.erb", "#{models}/Entity.java")
60
+ end
61
+
62
+ def create_repositories_directory
63
+ repositories = File.join(@src, options[:repositories_package])
64
+ empty_directory repositories
65
+ template("orm/Repository-#{orm}.java.tt", "#{repositories}/GenericRepository.java")
66
+ end
67
+
68
+ def create_main_resources
69
+ directory("resources", Configuration::MAIN_RESOURCES)
70
+ end
71
+
72
+ def create_webapp
73
+ @base_package = options[:package]
74
+ @models_package = "#{@base_package}.#{options[:models_package]}"
75
+ directory("webapp", Configuration::WEB_APP)
76
+ end
77
+
78
+ def create_javascripts
79
+ javascripts = File.join(Configuration::WEB_APP, "javascripts")
80
+ create_file File.join(javascripts, "application.js")
81
+ end
82
+
83
+ def configure_scaffold_properties
84
+ template("springmvc-scaffold.erb", Configuration::FILENAME)
85
+ end
86
+
87
+ def create_test
88
+ empty_directory Configuration::TEST_SRC
89
+ test_src = File.join(Configuration::TEST_SRC, options[:package].gsub(".", File::Separator))
90
+
91
+ empty_directory File.join(test_src, options[:controllers_package])
92
+ empty_directory File.join(test_src, options[:models_package])
93
+ empty_directory File.join(test_src, options[:repositories_package])
94
+
95
+ empty_directory Configuration::TEST_RESOURCES
96
+ end
97
+
98
+ private
99
+ def validate
100
+ unless BUILD_TOOLS.include? build_tool
101
+ puts "Build tool #{build_tool} is not supported. The supported build tools are: #{BUILD_TOOLS.join(', ')}"
102
+ Kernel::exit
103
+ end
104
+ unless ORMS.include? orm
105
+ puts "ORM #{orm} is not supported. The supported object-relational mapping are: #{ORMS.join(", ")}"
106
+ Kernel::exit
107
+ end
108
+
109
+ if File.directory?(project_path)
110
+ puts "The project #{project_path} already exist"
111
+ Kernel::exit
112
+ end
113
+ end
114
+
115
+ def orm
116
+ options[:orm]
117
+ end
118
+
119
+ def build_tool
120
+ options[:build_tool]
121
+ end
122
+
123
+ end
@@ -0,0 +1,26 @@
1
+ class Dependencies
2
+
3
+ def self.compile_scope
4
+ hibernate_version = "4.3.7.Final"
5
+ [Dependency.new("org.springframework", "spring-webmvc", "4.1.3.RELEASE"),
6
+ Dependency.new("org.springframework", "spring-orm", "4.1.3.RELEASE"),
7
+ Dependency.new("javax.servlet", "jstl", "1.2"),
8
+ Dependency.new("org.hsqldb", "hsqldb", "2.3.2"),
9
+ Dependency.new("org.hibernate", "hibernate-entitymanager", hibernate_version),
10
+ Dependency.new("org.hibernate", "hibernate-c3p0", hibernate_version),
11
+ Dependency.new("org.hibernate", "hibernate-validator", "5.1.3.Final"),
12
+ Dependency.new("org.slf4j", "slf4j-log4j12", "1.7.7"),
13
+ Dependency.new("joda-time", "joda-time", "2.5"),
14
+ Dependency.new("org.sitemesh", "sitemesh", "3.0.0")]
15
+ end
16
+
17
+ def self.test_scope
18
+ [Dependency.new("junit", "junit", "4.11"),
19
+ Dependency.new("org.mockito", "mockito-all", "1.10.8")]
20
+ end
21
+
22
+ def self.provided_scope
23
+ [Dependency.new("javax.servlet", "servlet-api", "2.5"),
24
+ Dependency.new("javax.servlet.jsp", "jsp-api", "2.2")]
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ class Dependency
2
+
3
+ attr_accessor :group, :name, :version, :exclusions
4
+
5
+ def initialize(group, name, version=nil, exclusions=[])
6
+ @group = group
7
+ @name = name
8
+ @version = version
9
+ @exclusions = exclusions
10
+ end
11
+
12
+ def has_exclusions?
13
+ !@exclusions.empty?
14
+ end
15
+ end
@@ -0,0 +1,56 @@
1
+ repositories {
2
+ mavenCentral()
3
+ }
4
+
5
+ apply plugin: 'java'
6
+ apply plugin: 'war'
7
+ apply plugin: 'jetty'
8
+ apply plugin: 'eclipse'
9
+
10
+ sourceCompatibility = 1.6
11
+ targetCompatibility = 1.6
12
+ version = '1.0'
13
+
14
+ sourceSets {
15
+ main {
16
+ java {
17
+ srcDir '<%= Configuration::MAIN_SRC %>'
18
+ }
19
+ resources {
20
+ srcDir '<%= Configuration::MAIN_RESOURCES %>'
21
+ }
22
+ }
23
+ test {
24
+ java {
25
+ srcDir '<%= Configuration::TEST_SRC %>'
26
+ }
27
+ resources {
28
+ srcDir '<%= Configuration::TEST_RESOURCES %>'
29
+ }
30
+ }
31
+ }
32
+
33
+ sourceSets.main.output.classesDir = new File('<%= Configuration::WEB_INF %>/classes')
34
+
35
+ jettyRun.scanIntervalSeconds=3
36
+ jettyRun.contextPath = '/'
37
+ [jettyRunWar,jettyStop]*.stopPort = 8081
38
+ [jettyRunWar,jettyStop]*.stopKey = 'stopKey'
39
+
40
+ dependencies {
41
+ <% Dependencies.compile_scope.each do |dependency| -%>
42
+ compile group: '<%= dependency.group %>', name: '<%= dependency.name %>', version: '<%= dependency.version %>'<% if dependency.has_exclusions? %>, {<% dependency.exclusions.each do |exclusion| %>
43
+ exclude group: '<%= exclusion.group %>', name: '<%= exclusion.name %>'<% end %>
44
+ }<% end %>
45
+ <% end -%>
46
+
47
+ //Provided dependencies
48
+ <% Dependencies.provided_scope.each do |dependency| -%>
49
+ providedCompile group: '<%= dependency.group %>', name: '<%= dependency.name %>', version: '<%= dependency.version %>'
50
+ <% end -%>
51
+
52
+ //Test dependencies
53
+ <% Dependencies.test_scope.each do |dependency| -%>
54
+ testCompile group: '<%= dependency.group %>', name: '<%= dependency.name %>', version: '<%= dependency.version %>'
55
+ <% end -%>
56
+ }
@@ -0,0 +1,46 @@
1
+ package <%= options[:package] %>.<%= options[:models_package] %>;
2
+
3
+ import javax.persistence.GeneratedValue;
4
+ import javax.persistence.Id;
5
+ import javax.persistence.MappedSuperclass;
6
+
7
+ @MappedSuperclass
8
+ public class Entity {
9
+
10
+ @Id
11
+ @GeneratedValue
12
+ private Long id;
13
+
14
+ public void setId(Long id) {
15
+ this.id = id;
16
+ }
17
+
18
+ public Long getId() {
19
+ return id;
20
+ }
21
+
22
+ @Override
23
+ public boolean equals(Object obj) {
24
+ if (obj == null) {
25
+ return false;
26
+ }
27
+ if (this == obj) {
28
+ return true;
29
+ }
30
+ if (getClass() != obj.getClass()) {
31
+ return false;
32
+ }
33
+ final Entity other = (Entity) obj;
34
+ if (id != other.id && (id == null || !id.equals(other.id))) {
35
+ return false;
36
+ }
37
+ return true;
38
+ }
39
+
40
+ @Override
41
+ public int hashCode() {
42
+ int hash = 7;
43
+ hash = 17 * hash + (this.getId() != null ? this.getId().hashCode() : 0);
44
+ return hash;
45
+ }
46
+ }