springmvc-scaffold 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ }