352 Commits

Author SHA1 Message Date
Stuart Boston 34b337aecd Merge pull request #50 from Omertron/dependabot/maven/junit-junit-4.13.1
Bump junit from 4.12 to 4.13.1
2020-11-11 13:30:49 +00:00
dependabot[bot] 3155555d7a Bump junit from 4.12 to 4.13.1
Bumps [junit](https://github.com/junit-team/junit4) from 4.12 to 4.13.1.
- [Release notes](https://github.com/junit-team/junit4/releases)
- [Changelog](https://github.com/junit-team/junit4/blob/main/doc/ReleaseNotes4.12.md)
- [Commits](https://github.com/junit-team/junit4/compare/r4.12...r4.13.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-13 08:04:27 +00:00
Stuart Boston 92c6de7426 Merge pull request #48 from denyskonakhevych/fix-generics
fix compilation problems
2020-01-30 17:54:46 +00:00
denys.konakhevych 252a6abab2 fix compilation problems 2020-01-22 13:48:09 +02:00
Stuart Boston 07b06455cf Merge pull request #47 from Omertron/dependabot/maven/version.jackson-2.10.0
Bump version.jackson from 2.8.11 to 2.10.0
2019-11-05 13:42:37 +00:00
dependabot[bot] c02ae50bff Bump version.jackson from 2.8.11 to 2.10.0
Bumps `version.jackson` from 2.8.11 to 2.10.0.

Updates `jackson-core` from 2.8.11 to 2.10.0
- [Release notes](https://github.com/FasterXML/jackson-core/releases)
- [Commits](https://github.com/FasterXML/jackson-core/compare/jackson-core-2.8.11...jackson-core-2.10.0)

Updates `jackson-annotations` from 2.8.11 to 2.10.0
- [Release notes](https://github.com/FasterXML/jackson/releases)
- [Commits](https://github.com/FasterXML/jackson/commits)

Updates `jackson-databind` from 2.8.11 to 2.10.0
- [Release notes](https://github.com/FasterXML/jackson/releases)
- [Commits](https://github.com/FasterXML/jackson/commits)

Signed-off-by: dependabot[bot] <support@github.com>
2019-11-04 21:25:14 +00:00
Stuart Boston bf132d7c72 Merge pull request #46 from Kaferusha/primary_release
added methods to Discover
2018-07-26 15:06:23 +01:00
Anastasiya Zhukova 9667a34a01 added methods to Discover 2018-07-11 11:40:54 +07:00
Stuart Boston efeae0de0b Rollback Jackson version 2018-04-03 21:50:41 +01:00
Stuart Boston 963dceb6bd Fix Networks Test 2018-04-03 21:47:38 +01:00
Stuart Boston 695077a1d7 Update POM versions 2018-04-03 21:24:06 +01:00
Stuart Boston 2de5728b3a Add javadoc 2018-04-03 20:53:15 +01:00
Stuart Boston 6733bb6191 Update credit methods
CreditBasic
CreditMovieBasic
CreditTVBasic
2018-04-03 20:35:25 +01:00
Stuart Boston 71178f21cd Update TVSeasonBasic
Add Name and Overview
2018-04-03 20:09:27 +01:00
Stuart Boston a0a6a62dbe Update PersonFind
add KnownForDepartment
2018-04-03 20:03:08 +01:00
Stuart Boston 119a51c8e8 Update person models 2018-04-03 19:45:03 +01:00
Stuart Boston 240110848a Update Network 2018-04-03 19:41:10 +01:00
Stuart Boston 4f89f03b7f Update JobDepartment list
renamed job_list to jobs
2018-04-03 19:38:53 +01:00
Stuart Boston 33daddb40e Update Network model 2018-04-03 18:49:57 +01:00
Stuart Boston 4203dc55a5 Update Alternative Titles 2018-04-02 21:41:55 +01:00
Stuart Boston 998eb06b69 Update Company Information 2018-04-02 21:15:57 +01:00
Stuart Boston 71fa47b48f Merge pull request #44 from aviemzur/get-movie-recommendations
Get movie recommendations method
2018-01-25 15:22:22 +00:00
Stuart Boston 67bb8d21bd Merge pull request #43 from aviemzur/add-intellij-idea-files-to-gitignore
Add IntelliJ IDEA files to .gitignore
2018-01-25 15:22:06 +00:00
Aviem Zur d6542d0676 Get movie recommendations method 2018-01-15 07:31:23 +02:00
Aviem Zur 02b03c5c58 Add IntelliJ IDEA files to .gitignore 2018-01-15 07:24:36 +02:00
Stuart Boston eb9e9930e1 More javadoc fixes 2017-07-07 13:58:52 +01:00
Stuart Boston dd82c0d906 More javadoc 2017-07-07 11:58:50 +01:00
Stuart Boston e184077f9d Add more javadoc 2017-07-07 11:49:08 +01:00
Stuart Boston a7a099ac0c remove un-extended methods
Use the base methods instead
2017-07-07 11:32:55 +01:00
Stuart Boston 3a1251777e Use isEmpty in tests 2017-07-07 11:23:54 +01:00
Stuart Boston 8a3af38b0c Add javadoc to ApiUrl 2017-07-07 10:45:46 +01:00
Stuart Boston 3104588272 Add gender to MediaCreditCrew object 2017-07-07 10:28:54 +01:00
Stuart Boston 95ff0f0119 Merge pull request #41 from stigrv/master
Add missing media type
2017-07-07 09:01:48 +01:00
Stuart Boston c3bd8efbf9 Merge pull request #42 from stigrv/gender
Correct gender assignment
2017-07-07 09:01:20 +01:00
Stig Runar Vangen 09a3fb5ffe Correct gender assignment 2017-07-07 08:55:34 +02:00
Stig Runar Vangen ce06aacec9 Correct gender assignment 2017-07-07 08:47:30 +02:00
Stig Runar Vangen ec9c4dd45c Add missing media type 2017-07-07 08:31:39 +02:00
Stuart Boston 0940c7ac38 Update List test 2017-04-20 21:21:42 +01:00
Stuart Boston ca9f3248b7 Skip invalid show in test
Supernatural doesnt have alt titles
2017-04-20 20:03:40 +01:00
Stuart Boston b91dac2c9d Remove unsupported SearchList function 2017-04-20 19:25:02 +01:00
Stuart Boston c5a1a85a2a Add gender to MediaCreditCast 2017-04-20 18:22:51 +01:00
Stuart Boston 9ab81018dd Add additional fields to methods 2017-03-17 10:40:16 +00:00
Stuart Boston 6eec791933 Update POM versions 2017-03-17 09:22:46 +00:00
Omertron 74fac5636a [maven-release-plugin] prepare for next development iteration 2016-05-01 15:31:54 +00:00
Omertron 3f1c359a9f [maven-release-plugin] prepare release themoviedbapi-4.3 2016-05-01 15:31:43 +00:00
Stuart Boston 0c455accb5 Rename ReleaseDate field
A field should not duplicate the name of its containing class
2016-03-24 20:54:39 +00:00
Stuart Boston ca4fc59a80 Rename language field
A field should not duplicate the name of its containing class
2016-03-24 20:53:16 +00:00
Stuart Boston 799d6d6fd5 Add ReleaseDates method
fixes #36
2016-03-20 10:28:21 +00:00
Stuart Boston 39465e1ba2 Fix NowPlaying call 2016-03-20 08:18:41 +00:00
Stuart Boston c208b62384 update from method 2016-03-19 20:33:03 +00:00
Stuart Boston e83d947dfe Add gender to Person 2016-03-19 19:33:27 +00:00
Stuart Boston bab9c80781 Add facebook and twitter IDs 2016-03-19 19:33:14 +00:00
Stuart Boston 45515869c6 Add missing country to Video 2016-03-19 17:37:20 +00:00
Stuart Boston 11f18ce3d8 Correct use of iso code names 2016-03-19 16:02:03 +00:00
Stuart Boston a9e22f4d75 fix java doc 2016-03-19 15:33:34 +00:00
Stuart Boston 1d977f9d7b Add missing language to translation 2016-03-19 15:31:31 +00:00
Stuart Boston 96aa13bd70 Merge pull request #34 from DevFactory/release/consective-appends-should-reuse-fix-1
Consecutive Appends Should Reuse
2016-03-04 13:44:18 +00:00
Zeeshan Asghar 84e08a93e2 pmd:ConsecutiveAppendsShouldReuse Consecutive Appends Should Reuse 2016-03-04 13:38:09 +05:00
Stuart Boston 2dc61738c8 Add empty test for debugging 2016-02-26 13:07:51 +00:00
Omertron b0c998b984 [maven-release-plugin] prepare for next development iteration 2016-02-26 09:17:57 +00:00
Omertron f506be70ea [maven-release-plugin] prepare release themoviedbapi-4.2 2016-02-26 09:17:46 +00:00
Stuart Boston 42ff59d4ba Reduce complexity of test 2016-02-25 15:11:10 +00:00
Stuart Boston 302e47b496 Remove unused methods 2016-02-25 15:10:44 +00:00
Stuart Boston f0499bba01 Fix crew credit test 2016-02-25 13:27:09 +00:00
Stuart Boston 95a0613cb0 Remove incorrect exception 2016-02-25 13:07:39 +00:00
Stuart Boston eb396be02e Remove unused constructors 2016-02-25 11:31:00 +00:00
Stuart Boston 80177ff9c7 Sonar: method naming 2016-02-25 10:55:10 +00:00
Stuart Boston 66de073677 Sonar fixes 2016-02-25 10:51:07 +00:00
Stuart Boston cf667fa69e minor sonar issues 2016-02-25 09:03:28 +00:00
Stuart Boston 525657e6f6 Add new TVBasic attribs 2016-02-25 08:41:27 +00:00
Stuart Boston f0faafe702 Add new collection attribs 2016-02-25 08:41:13 +00:00
Stuart Boston c7b37121ca Update copyright date 2016-02-25 07:59:40 +00:00
Stuart Boston 2c7095908b Update POM versions 2016-02-24 19:24:08 +00:00
Omertron 012d694d78 [maven-release-plugin] prepare for next development iteration 2016-01-08 10:50:06 +00:00
Omertron cbc2121a87 [maven-release-plugin] prepare release themoviedbapi-4.1 2016-01-08 10:49:54 +00:00
Stuart Boston d1e1454134 Catch connection issues
Fixes #28
2015-11-08 19:42:53 +00:00
Stuart Boston 80414b7c2a Update main API 2015-11-08 19:06:24 +00:00
Stuart Boston 3bfbc1c0a7 Revert version of surefire
v2.19 does not allow individual tests to be run
2015-11-08 19:04:59 +00:00
Stuart Boston 463032bc05 Updated TV methods
Changed some methods for TVInfo
2015-11-08 19:04:15 +00:00
Stuart Boston c04f330d54 Add setter for genre ids
Used in the similar TV ATR
2015-11-08 16:43:46 +00:00
Stuart Boston e95b76c44a Replace tabs with spaces 2015-11-05 20:43:56 +00:00
Stuart Boston d8e56616e8 Update api-common version 2015-11-05 20:33:38 +00:00
Stuart Boston a47c55ee7e Update POM versions 2015-11-04 22:04:13 +00:00
Stuart Boston 4134594de5 Revert "Add more information to CollectionInfo"
This reverts commit b5b84cc962.
2015-08-29 21:23:08 +01:00
Stuart Boston 64ca72c182 Update POM versions 2015-08-25 20:53:38 +01:00
Stuart Boston d21bf07f1d Check for null AppendToResponse
Fix #26
2015-08-25 15:06:39 +01:00
Stuart Boston b5b84cc962 Add more information to CollectionInfo 2015-08-25 14:47:15 +01:00
Stuart Boston 2837424c09 Fix long conversion issue 2015-06-01 15:59:26 +01:00
Stuart Boston c8310935aa More diamond interfaces 2015-06-01 12:53:48 +01:00
Stuart Boston 50171a7da5 Remove unused method 2015-06-01 11:52:46 +01:00
Stuart Boston f512fc0754 Sonar fixes 2015-06-01 11:51:27 +01:00
Stuart Boston 06da84c2ac Use Diamond interface 2015-06-01 11:38:36 +01:00
Stuart Boston c3569f0140 Revert "Use diamond interface"
This reverts commit 4f9d74c9f7.
2015-06-01 11:38:11 +01:00
Stuart Boston 4f9d74c9f7 Use diamond interface 2015-06-01 11:37:54 +01:00
Stuart Boston 0aab56a044 Code tidy up 2015-05-31 17:18:28 +01:00
Stuart Boston 87f973955e Combined Credits Fix
Swap combined credits for tv & movie credits
2015-05-31 17:16:57 +01:00
Stuart Boston 64e88fa9f3 Added ID to ListItemStatus 2015-05-30 19:10:09 +01:00
Stuart Boston fb0e14cd21 Updated Tests 2015-05-30 19:09:53 +01:00
Stuart Boston 8451a4630b Serializable account 2015-05-30 19:09:36 +01:00
Stuart Boston e00d9357e2 Add check for rate limit
Delay and retry if code 429 encountered
2015-05-30 19:01:17 +01:00
Stuart Boston 212143b18d Update model with missing fields 2015-05-30 16:34:03 +01:00
Stuart Boston c9f85bab6d Remove gitter chat 2015-05-26 22:05:26 +01:00
Stuart Boston 4ec54425f3 Update badges and build status 2015-05-26 22:00:15 +01:00
Stuart Boston 00b538efb1 Updated People Test 2015-05-12 11:19:57 +01:00
Stuart Boston b16d452114 Correct return types for people methods 2015-04-27 14:24:52 +01:00
Stuart Boston a83c75070d Merge pull request #24 from gitter-badger/gitter-badge
Add a Gitter chat badge to README.md
2015-04-17 15:09:05 +01:00
The Gitter Badger 178b49c413 Added Gitter badge 2015-04-17 14:08:25 +00:00
Stuart Boston 55601a0698 Add commons-lang3 dependency 2015-04-16 15:02:56 +01:00
Stuart Boston a874297106 Use diamond interface 2015-04-09 21:42:43 +01:00
Stuart Boston eff654fd61 Update build procedure 2015-04-08 16:02:02 +01:00
Stuart Boston 63afef71a4 Update dependancy versions 2015-04-08 09:54:01 +01:00
Stuart Boston 1b180f9e28 Set source version to 1.7 2015-03-28 10:48:56 +00:00
Stuart Boston cfc215cd74 Fix AppendToResponseBuilder 2015-03-27 11:36:03 +00:00
Omertron 5fefa68352 [maven-release-plugin] prepare for next development iteration 2015-03-17 12:40:10 +00:00
Omertron 2a1e120431 [maven-release-plugin] prepare release themoviedbapi-4.0 2015-03-17 12:39:58 +00:00
Stuart Boston 1d85c8b9d4 ATR Builder 2015-03-17 10:04:44 +00:00
Stuart Boston b7e1f42dcf Add skip ability to AppendToResponse tests 2015-03-16 11:48:45 +00:00
Stuart Boston e6e7fcc83e Append To Response for Season and Episode 2015-03-16 11:27:11 +00:00
Stuart Boston 84243703e3 Corrected AppendToResponse methods 2015-03-16 09:46:25 +00:00
Stuart Boston c94688b0e1 WrapperGenericList has dates 2015-03-15 21:38:42 +00:00
Stuart Boston 8dadd91bf5 Add AppendToResponse interfaces 2015-03-15 19:31:34 +00:00
Stuart Boston 6e5873b7af Rename interfaces 2015-03-15 18:49:00 +00:00
Stuart Boston 5a1719c662 AppendToResponse: People Methods 2015-03-14 08:07:05 +00:00
Stuart Boston 7c72a1fa92 Rename Person to PersonInfo
Matches rest of the methods
2015-03-13 21:29:52 +00:00
Stuart Boston c2887f2f8c AppendToResponse: TV Methods 2015-03-13 21:25:40 +00:00
Stuart Boston 99896ca027 AppendToResponse: Movie methods 2015-03-13 20:25:24 +00:00
Stuart Boston 6e24cbe1d1 Add JsonProperties to wrapper 2015-03-13 18:28:51 +00:00
Stuart Boston 01fba3b235 Correct spelling error 2015-03-13 18:27:13 +00:00
Stuart Boston 21e1e55633 Method enums 2015-03-10 21:53:25 +00:00
Stuart Boston a3f001a4d9 Updated MovieInfo with defaults 2015-03-10 21:06:36 +00:00
Stuart Boston f6a09940c1 Merging credits 2015-03-08 18:51:43 +00:00
Stuart Boston 6984049f44 Network is generic 2015-03-08 13:29:04 +00:00
Stuart Boston 3bd448220d Remove unused override method 2015-03-08 10:35:34 +00:00
Stuart Boston 8e11e975b7 Add Serializable to all model classes 2015-03-08 10:31:50 +00:00
Stuart Boston 28c814c1f0 Refactor wrappers 2015-03-08 10:02:54 +00:00
Stuart Boston e5f2f1eaa9 Wrappers do not need to be serializable 2015-03-08 09:36:11 +00:00
Stuart Boston 8e68dd6dde Correct iso_3166 to country not language 2015-03-08 08:16:39 +00:00
Stuart Boston ebada5f008 Make changes generic 2015-03-08 08:02:02 +00:00
Stuart Boston 91b86d9fd0 fixed tests 2015-03-07 20:34:38 +00:00
Stuart Boston c669689490 Updated tests 2015-03-07 20:13:07 +00:00
Stuart Boston a60d066993 fixed tests 2015-03-07 08:06:09 +00:00
Stuart Boston 1aa6e5bbf8 Updated TestSuite 2015-03-06 22:33:21 +00:00
Stuart Boston 53aeac2b3e Add Interfaces where appropriate 2015-03-06 19:13:55 +00:00
Stuart Boston d3942ccfb6 Add Interfaces where appropriate 2015-03-06 18:51:59 +00:00
Stuart Boston 90e6891088 Updated Models & Test cases 2015-03-06 17:53:28 +00:00
Stuart Boston d03adbfb38 Added Season and Episdes 2015-03-06 14:00:09 +00:00
Stuart Boston 564b00f423 Result lists 2015-03-06 13:49:27 +00:00
Stuart Boston a89cd9c923 Updated Results #1 2015-03-06 10:14:16 +00:00
Stuart Boston 23fffe38cf Renamed method 2015-03-05 21:49:19 +00:00
Stuart Boston 2a46dc02dd updatedCompanies 2015-03-05 21:47:26 +00:00
Stuart Boston 9245984ca2 Rename ResultsMap 2015-03-05 21:42:50 +00:00
Stuart Boston 5c56e20f73 Rename ResultList 2015-03-05 21:33:06 +00:00
Stuart Boston 573d97c906 Update to use ResultList 2015-03-05 21:31:12 +00:00
Stuart Boston a21e09a7ae Add TestSuite
Update AccountTests
2015-03-05 21:19:38 +00:00
Stuart Boston 1b1e2d8f67 Renamed MovieDb to MovieInfo
In line with other models
2015-03-05 20:25:33 +00:00
Stuart Boston a05d6bb2b2 Updated readme 2015-03-05 20:18:40 +00:00
Stuart Boston f7d441468a Release 4.0
Finally! The TV work has been mostly completed
2015-03-05 19:48:54 +00:00
Stuart Boston 455957b6f2 update git ignore 2015-03-05 19:45:22 +00:00
Stuart Boston 1af4e39815 Fix tests 2015-03-05 19:38:00 +00:00
Stuart Boston 9693aa458d TV Episodes 2015-03-05 15:57:27 +00:00
Stuart Boston f713bde372 TV Seasons 2015-03-05 13:45:15 +00:00
Stuart Boston f75e910a09 Add TV Season & Episode to ApiUrl 2015-03-05 13:05:31 +00:00
Stuart Boston 29c8aa5deb TV Season and Episode stub methods 2015-03-05 12:04:26 +00:00
Stuart Boston 60df7278d4 Fix Alt Titles (TV) 2015-03-05 10:07:50 +00:00
Stuart Boston ee0c6e12f2 Added methods to main API, fixed missing parameter 2015-03-05 09:53:13 +00:00
Stuart Boston 59f806b27e TV Shows complete 2015-03-05 09:41:21 +00:00
Stuart Boston b35c4beb45 TV Shows #1 2015-03-05 09:25:27 +00:00
Stuart Boston 34c019a86c Update PersonFind to remove profile path (in Basic model) 2015-03-05 08:23:55 +00:00
Stuart Boston c8e71db71f Updated TV 2015-03-04 21:55:57 +00:00
Stuart Boston 27dcc56492 TV Stubs 2015-03-04 19:54:48 +00:00
Stuart Boston 286b748a34 Update WrapperGenericList methods 2015-03-04 15:53:53 +00:00
Stuart Boston ffdeb4c1b8 Uncomment tests 2015-03-04 15:44:08 +00:00
Stuart Boston 2c9f671345 Minor sonar fixes 2015-03-04 15:30:33 +00:00
Stuart Boston 591ccdc0f1 Fixed guest sessions ratings 2015-03-04 15:26:27 +00:00
Stuart Boston 25e22919a5 Fix People class with MixIn 2015-03-04 14:43:42 +00:00
Stuart Boston 8d2fbb8fa9 Remove unused wrappers #2 2015-03-04 13:03:25 +00:00
Stuart Boston ccd6f7411c Remove unused wrappers 2015-03-04 12:59:35 +00:00
Stuart Boston 590852c5ac rename new model package 2015-03-04 12:41:59 +00:00
Stuart Boston e95de23049 remove old people methods 2015-03-04 12:39:36 +00:00
Stuart Boston 9f5a8b1650 remove old tv 2015-03-04 11:59:47 +00:00
Stuart Boston aa9f52f3c3 Move more models 2015-03-04 11:57:13 +00:00
Stuart Boston 24ac470ede Remove KeywordMovies 2015-03-04 11:42:18 +00:00
Stuart Boston 51593fbc52 Refactor model packages 2015-03-04 11:32:40 +00:00
Stuart Boston f107862285 Split out compare movies to utility class 2015-03-04 11:11:22 +00:00
Stuart Boston 8cb14aeb27 Split out compare movies to utility class 2015-03-04 10:15:10 +00:00
Stuart Boston dd3e04e6d1 Simplify ApiUrl 2015-03-04 09:37:59 +00:00
Stuart Boston 3828eca965 Sonar: Field should not duplicate name of the class 2015-03-04 09:17:13 +00:00
Stuart Boston 1f1054995d Sonar fixes 2 2015-03-04 09:13:55 +00:00
Stuart Boston 0e57603b02 Sonar fixes 2015-03-04 08:56:44 +00:00
Stuart Boston 998c19f46b Fixed main class 2015-03-03 22:04:08 +00:00
Stuart Boston 4f32632e52 Added missing review method 2015-03-03 21:54:51 +00:00
Stuart Boston 577a25c81f Main methods 2015-03-03 21:25:07 +00:00
Stuart Boston d7242984f7 Movie 2015-03-03 21:14:40 +00:00
Stuart Boston 7a9ea47d4b More movie methods 2015-03-03 19:56:59 +00:00
Stuart Boston d80f15a52d Partial Movies 2015-03-03 17:45:15 +00:00
Stuart Boston 4db6d22d5b stub tests 2015-03-03 13:34:48 +00:00
Stuart Boston 306f6f3cc2 stub methods 2015-03-03 13:19:33 +00:00
Stuart Boston 5dd6ed7d60 minor sonar fixes 2015-03-03 12:39:28 +00:00
Stuart Boston aa6bb1e252 add equals and hashcode to ArtworkMedia 2015-03-03 12:38:25 +00:00
Stuart Boston d0ec5c3b18 minor sonar fixes 2015-03-03 12:34:53 +00:00
Stuart Boston 2697e3fcf2 Add missing parameters 2015-03-03 12:26:55 +00:00
Stuart Boston 4835cd426c Fixed Find TV test 2015-03-03 11:52:58 +00:00
Stuart Boston dada02db89 Fixed People Combined Search 2015-03-03 11:38:37 +00:00
Stuart Boston e9945654c9 Fixed Multi search 2015-03-02 22:03:06 +00:00
Stuart Boston e850ba1589 fixed SearchPerson 2015-03-02 20:24:43 +00:00
Stuart Boston e118f56f99 fixed Search 2015-03-02 20:14:59 +00:00
Stuart Boston 173792dc2e Tests 2015-03-02 19:53:21 +00:00
Stuart Boston df11f93ed7 Move some stuff 2015-03-02 19:47:19 +00:00
Stuart Boston 3ebdce3c35 Fix search 2015-03-02 16:00:29 +00:00
Stuart Boston ed987dd051 Tests & notes 2015-03-02 15:47:16 +00:00
Stuart Boston 0143f31bbc Person 2015-03-02 15:46:07 +00:00
Stuart Boston 4efc282eed Uncomment tests 2015-03-02 13:37:20 +00:00
Stuart Boston c93600fff5 Remove generic TypeReference builder 2015-03-02 13:35:36 +00:00
Stuart Boston 9c473bf24b Update tests 2015-03-02 13:10:06 +00:00
Stuart Boston 7c193d996b partial 2015-03-01 21:53:32 +00:00
Stuart Boston 46a50703d7 People (partial) 2015-03-01 19:25:47 +00:00
Stuart Boston 45b66ef0b1 Stub methods 2015-02-28 15:54:52 +00:00
Stuart Boston d97e39c77e Search (Partial - missing multi) 2015-02-28 14:47:55 +00:00
Stuart Boston c22ac9333e Search (Partial - missing multi) 2015-02-28 14:43:31 +00:00
Stuart Boston bbc85c09c4 Timezones 2015-02-28 11:49:13 +00:00
Stuart Boston bc333a4cb6 Reviews 2015-02-27 21:38:36 +00:00
Stuart Boston 2c71a1485c Networks 2015-02-27 20:57:54 +00:00
Stuart Boston 8522ac4171 Lists 2015-02-27 20:40:11 +00:00
Stuart Boston 50820a437f Guest session (partial) 2015-02-26 08:52:50 +00:00
Stuart Boston 6231130d46 Genres 2015-02-25 21:35:02 +00:00
Stuart Boston a129692ae3 Partial Find (not working) 2015-02-25 20:58:00 +00:00
Stuart Boston 57673d3f11 Partial Find (not working) 2015-02-25 20:57:35 +00:00
Stuart Boston d3c508aabf Partial Find 2015-02-25 16:48:45 +00:00
Stuart Boston 5b4acf1f8c Remove unused tests 2015-02-24 13:33:10 +00:00
Stuart Boston 45caa4d14d Discover 2015-02-24 13:15:44 +00:00
Stuart Boston e4dc8e9465 Remove unused variable 2015-02-23 21:34:13 +00:00
Stuart Boston 3e1b0f268b Credits 2015-02-23 21:19:38 +00:00
Stuart Boston 5642d7c99e rename movie and tv fav classes 2015-02-23 19:52:20 +00:00
Stuart Boston 410df1f056 Company 2015-02-23 19:50:03 +00:00
Stuart Boston 69d2eba4db Collections 2015-02-23 17:24:29 +00:00
Stuart Boston 77b6ae5f60 Changes & Certification 2015-02-23 17:13:48 +00:00
Stuart Boston 77f1cf18e7 move completed model classes 2015-02-23 10:28:39 +00:00
Stuart Boston 7f3f6f7d25 fixed TV method name 2015-02-23 10:18:07 +00:00
Stuart Boston 59c1b1f3ea renamed TV method 2015-02-23 10:17:33 +00:00
Stuart Boston e9ef62d031 Final account tests 2015-02-23 10:13:42 +00:00
Stuart Boston 9ea18f546d More Account methods 2015-02-22 19:04:07 +00:00
Stuart Boston dc7e8c9600 Fix minor bug in AbstractTest 2015-02-21 19:31:13 +00:00
Stuart Boston be963f38a6 Update AbstractTests 2015-02-21 16:08:42 +00:00
Stuart Boston febc5185a4 Update AbstractTest 2015-02-20 21:59:57 +00:00
Stuart Boston c88fde759c Remove SubMethod(id, xxx) 2015-02-20 15:16:41 +00:00
Stuart Boston 110b77d09a Refactor model layout 2015-02-20 14:29:18 +00:00
Stuart Boston dc6a49bc97 rename TV class 2015-02-18 10:26:41 +00:00
Stuart Boston af2d8400fc Tidy up of test cases 2015-02-18 10:19:26 +00:00
Stuart Boston a22a49cbf3 Replace CloseableHttpClient with HttpClient 2015-02-17 21:07:37 +00:00
Stuart Boston ba64e339b1 Updated methods 2015-02-17 21:03:57 +00:00
Stuart Boston debfb1209e Replace CloseableHttpClient with HttpClient 2015-02-17 20:55:59 +00:00
Stuart Boston e5e7cd1ac3 Add Search 2015-02-16 18:25:52 +00:00
Stuart Boston 3078d12005 Add Reviews 2015-02-16 18:19:08 +00:00
Stuart Boston 1e01a4e7df Add People 2015-02-16 18:14:22 +00:00
Stuart Boston c3edbc2aad Update exception messages 2015-02-16 17:18:05 +00:00
Stuart Boston 9d396d32e5 Updated 2015-02-16 15:47:01 +00:00
Stuart Boston 4b95807845 Updated 2015-02-16 15:46:42 +00:00
Stuart Boston 97f3313d8c Updated 2015-02-16 13:06:10 +00:00
Stuart Boston bbda0eec72 Inital commit for release 4.0
Signed-off-by: Stuart Boston <Stuart.Boston@Gmail.com>
2015-02-16 08:50:11 +00:00
Stuart Boston 84e59d53eb Update POM versions 2015-02-15 09:25:21 +00:00
Stuart Boston 207f7f2488 Update failing test 2015-02-14 19:16:08 +00:00
Stuart Boston 87646c08e6 Fix ID method 2015-02-14 16:24:58 +00:00
Stuart Boston cef5f8f6f0 Add Enum URL methods 2015-02-14 16:10:25 +00:00
Stuart Boston dd2a35b54c Update API URL Builder 2015-02-14 14:10:15 +00:00
Stuart Boston c6e9c3fcf5 Use Parameters class 2015-02-13 15:41:01 +00:00
Stuart Boston 47f1521bf9 Remove testing.properties file 2015-02-13 13:03:51 +00:00
Stuart Boston 47ed93b69f Update account methods
Move to their own class
Updated HttpClient for POST and DELETE
2015-02-13 13:01:53 +00:00
Stuart Boston e736aee48a Remove unused methods and fields 2015-02-12 15:58:20 +00:00
Stuart Boston 6eda79830e Add HttpTools class
Add POST and DELETE commands
2015-02-12 15:54:09 +00:00
Stuart Boston ba0c8bc564 Update to CloseableHttpClient 2015-02-12 13:17:44 +00:00
Stuart Boston 6722019db8 Fix connection message 2015-02-07 13:51:12 +00:00
Stuart Boston 58a2858002 Add status code to response 2015-01-19 21:55:16 +00:00
Stuart Boston f45429859e Use API-Common exception 2015-01-18 13:38:14 +00:00
Stuart Boston 8a0d67f784 Correct Jackson version 2015-01-16 14:48:54 +00:00
Stuart Boston abf69af81d SLF4J and Jackson versions 2015-01-16 10:39:41 +00:00
Stuart Boston b0541d55e4 Merge pull request #21 from CupSoftware/master
Compatibility with api-common 1.3-SNAPSHOT
2015-01-15 12:16:07 +00:00
Christian Riedel b6cfb42170 Make use of api-commons’ new status code feature 2015-01-13 22:12:19 +01:00
Christian Riedel 783b076ead ignore ide settings files 2015-01-13 21:55:54 +01:00
Omertron 761daeb11a [maven-release-plugin] prepare for next development iteration 2014-12-31 17:34:20 +00:00
Omertron 035b998511 [maven-release-plugin] prepare release themoviedbapi-3.11 2014-12-31 17:34:03 +00:00
Omertron b353311169 Updated POM versions 2014-12-31 17:29:15 +00:00
Stuart Boston 588c618208 Update copyright date 2014-12-30 19:51:19 +00:00
Stuart Boston 5eb756e03e Update copyright date 2014-12-30 19:49:30 +00:00
Stuart Boston 9c58841c6c Add missing field to MoveiDB 2014-12-20 21:26:20 +00:00
Stuart Boston 64ee879834 Updated POM versions 2014-12-19 10:01:34 +00:00
Stuart Boston 56a0cdb341 Merge pull request #19 from IGZJcMinarro/master
Update trailers method
2014-12-08 15:09:33 +00:00
Jc Miñarro aa522e2e7e Change JsonProperty 2014-12-07 11:05:56 +01:00
Jc Miñarro 67496724ba Update trailers method 2014-12-07 00:10:08 +01:00
Omertron 6b5eb2f5ad [maven-release-plugin] prepare for next development iteration 2014-11-18 12:13:02 +00:00
Omertron 1189d6babd [maven-release-plugin] prepare release themoviedbapi-3.10 2014-11-18 12:12:44 +00:00
Stuart Boston 82c8b31f9f Remove some magic numbers 2014-10-15 09:21:25 +01:00
Stuart Boston d25c09f219 Use Apace Commons EqualsBuilder and HashCodeBuilder 2014-10-15 09:09:38 +01:00
Stuart Boston 75c9142385 Abstract some duplicate code 2014-10-14 14:54:38 +01:00
Stuart Boston d5fc5e279d Correct logger 2014-10-14 14:34:05 +01:00
Stuart Boston 00b24e3bdc Keep exception 2014-10-14 14:33:55 +01:00
Stuart Boston 8572433707 Unused method parameters 2014-10-14 14:28:28 +01:00
Stuart Boston a2f88915a5 Create some string constants 2014-10-14 14:18:04 +01:00
Stuart Boston f05dbb817f Fix bug with parent company 2014-10-14 14:16:50 +01:00
Stuart Boston 6ed9d9ea4c Useless parentheses around expressions should be removed to prevent any misunderstanding 2014-10-14 14:03:37 +01:00
Stuart Boston 2e7c85a41a Change to emptyList() 2014-10-14 13:49:42 +01:00
Stuart Boston 4ee48e15c2 Fix for null year comparison 2014-10-14 13:49:29 +01:00
Omertron 1e1cceceac Updated POM versions 2014-10-08 15:20:08 +02:00
Stuart Boston 48a8ff4e29 remove unused method 2014-10-02 11:29:14 +01:00
Stuart Boston c2d2c7cbe3 Fixed Session Tests 2014-10-01 17:10:48 +01:00
Stuart Boston 5c6f6fd9b1 Add missing fields to model 2014-10-01 17:05:54 +01:00
Stuart Boston f908794e2b Fixed properties load 2014-10-01 14:43:42 +01:00
Stuart Boston 85eb7a5a4a Add properties file for testing API 2014-10-01 13:48:57 +01:00
Stuart Boston d7fd35c4d5 Merge pull request #16 from mlaggner/master
changed MovieDbException to store also the url causing the exception
2014-09-23 19:57:21 +01:00
Manuel Laggner e465c9cfdd changed MovieDbException to store also the url causing the exception 2014-09-21 18:38:41 +02:00
Stuart Boston 46bfa7a324 Update TheMovieDbApiTest.java 2014-05-29 13:16:40 +01:00
Stuart Boston 021daccadc Fix issue #15
Throw an exception if there is a bad connection
2014-04-09 12:40:02 +01:00
Stuart Boston 421084737c Updated POM versions 2014-03-05 15:54:39 +00:00
Stuart Boston 88f120923e Add still sizes to config 2014-01-20 21:02:10 +00:00
Stuart Boston d5c996aef6 Update copyright date 2014-01-16 12:36:50 +00:00
Stuart Boston 8c1aabf1d3 Prevent null pointer exception if trailers are null 2014-01-16 12:27:44 +00:00
Stuart Boston c0653861c0 Add case insensitive compare method 2013-12-29 17:56:03 +00:00
Omertron d3c0c70fc9 [maven-release-plugin] prepare for next development iteration 2013-12-22 17:28:56 +01:00
Omertron 67b4efe77c [maven-release-plugin] prepare release themoviedbapi-3.9 2013-12-22 17:28:15 +01:00
Omertron 917c3bb029 Rollback partial release 2013-12-22 17:26:52 +01:00
Omertron 68cbc9b54b [maven-release-plugin] prepare release themoviedbapi-3.9 2013-12-22 16:29:04 +01:00
Stuart Boston e2f1008d01 Updated POM 2013-12-15 08:23:40 +00:00
Stuart Boston 51b202df2d Fix issue #14
Correct URL for collections
2013-12-14 19:07:37 +00:00
stuart.boston d84582d336 Update error message 2013-12-03 14:25:41 +00:00
Stuart Boston 121838598d Change port to integer 2013-11-27 10:46:17 +00:00
Stuart Boston cd09cf8dfe Add PersonCredit comparator 2013-11-24 17:44:07 +00:00
Stuart Boston 3a53039b3e Updated Results to get the size of the results when not populated by the wrapper 2013-11-22 14:38:50 +00:00
Stuart Boston f7b37a1eb9 Update dependency versions 2013-11-17 19:47:05 +00:00
Stuart Boston 52c19f98d4 Remove inline comments 2013-11-17 19:46:45 +00:00
Omertron 796459b816 [maven-release-plugin] prepare for next development iteration 2013-11-07 11:06:04 +01:00
Omertron eaf5849a43 [maven-release-plugin] prepare release themoviedbapi-3.8 2013-11-07 11:05:57 +01:00
Stuart Boston 231f60624b Tidy up log error messages 2013-11-07 09:52:21 +00:00
Stuart Boston 3b1855d75c Remove unused imports 2013-11-07 09:50:06 +00:00
Stuart Boston 0cfa4d0dd4 Update README.md 2013-11-07 08:44:29 +00:00
Stuart Boston 971ee44375 Remove unused comments 2013-11-01 12:47:52 +00:00
Stuart Boston 359a0d56a3 Added "type" to Trailer 2013-11-01 12:29:55 +00:00
Stuart Boston 8eea8c796a Update handlerUnknown code
Output the class that caused the unknown issue
2013-11-01 12:28:53 +00:00
Stuart Boston 82e9c5b06f Trim test logging message 2013-11-01 12:26:15 +00:00
Stuart Boston 57691ed17f Remove unused imports 2013-10-29 15:56:00 +00:00
Stuart Boston b705a85566 Add badges 2013-10-22 16:04:43 +01:00
Stuart Boston db4f3e6f80 Minor updates 2013-10-22 13:44:42 +01:00
Stuart Boston 9eed62c8d7 Updated javadoc 2013-10-22 12:03:25 +01:00
Stuart Boston 51e5166233 Throw MovieDbException if movie ID not found
Rather than pass a seemingly valid object back to the caller, this
change will throw a "MOVIE_ID_NOT_FOUND" exception to the caller.
Affects getMovieInfo and getMovieInfoImdb methods
Fixes #8
2013-10-02 09:15:50 +01:00
Stuart Boston dd5176d6c6 Add gitattributes file
Update line endings
2013-10-01 14:10:54 +01:00
Stuart Boston 6448542fb4 Merge pull request #7 from fcojean/master
Implemented MovieChangesList
2013-09-26 11:37:19 +01:00
Stuart Boston 1ac805bed3 Add missing Serializable 2013-09-25 09:58:24 +01:00
Stuart Boston 2ef41457d0 Change logging for abstract wrapper 2013-09-25 09:48:47 +01:00
Stuart Boston d3338cc106 Remove unused imports 2013-09-25 09:38:30 +01:00
Stuart Boston 2c5569d53d Add language and country to account information 2013-09-25 09:33:44 +01:00
Stuart Boston 546a1e0d93 Update README.md 2013-09-20 10:43:35 +01:00
Stuart Boston 3b503e78ef Add exceptions for unknown request types 2013-09-08 11:10:21 +01:00
Stuart Boston 4cb0314c56 Use pooling client for requests 2013-09-08 10:36:54 +01:00
Omertron 95b3a4dd36 [maven-release-plugin] prepare for next development iteration 2013-08-23 10:22:03 +02:00
201 changed files with 19472 additions and 7703 deletions
+22
View File
@@ -0,0 +1,22 @@
# Auto detect text files and perform LF normalization
* text=auto
# Custom for Visual Studio
*.cs diff=csharp
*.sln merge=union
*.csproj merge=union
*.vbproj merge=union
*.fsproj merge=union
*.dbproj merge=union
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain
+10 -2
View File
@@ -1,9 +1,17 @@
*.class *.class
# Package Files # # Package Files #
*.jar *.jar
*.war *.war
*.ear *.ear
*.bin
/target/ /target/
/nbactions.xml /nbactions.xml
testing.properties
*.bin
.settings
.classpath
.project
.DS_Store
/nbproject/
.idea
*.iml
+2 -1
View File
@@ -8,5 +8,6 @@ import java.lang.annotation.Target;
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER}) @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
public @interface JsonProperty { public @interface JsonProperty {
String value() default "";
String value() default "";
} }
+1 -1
View File
@@ -8,5 +8,5 @@ import java.lang.annotation.Target;
@Target(ElementType.TYPE) @Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
public @interface JsonRootName { public @interface JsonRootName {
String value() default ""; String value() default "";
} }
+50 -53
View File
@@ -11,59 +11,56 @@ import org.json.JSONObject;
public class ObjectMapper { public class ObjectMapper {
/** /**
* This takes a JSON string and creates (and populates) an object of the given class * This takes a JSON string and creates (and populates) an object of the
* with the data from that JSON string. It mimics the method signature of the jackson * given class with the data from that JSON string. It mimics the method
* JSON API, so that we don't have to import the jackson library into this application. * signature of the jackson JSON API, so that we don't have to import the
* * jackson library into this application.
* @param jsonString The JSON string to parse. *
* @param objClass The class of object we want to create. * @param jsonString The JSON string to parse.
* @return The instantiation of that class, populated with data from the JSON object. * @param objClass The class of object we want to create.
* @throws IOException If there was any kind of issue. * @return The instantiation of that class, populated with data from the
*/ * JSON object.
public <T> T readValue(String jsonString, Class<T> objClass) throws IOException { * @throws IOException If there was any kind of issue.
try { */
return readValue(new JSONObject(jsonString), objClass); public <T> T readValue(String jsonString, Class<T> objClass) throws IOException {
} try {
catch (IOException ioe) { return readValue(new JSONObject(jsonString), objClass);
throw ioe; } catch (IOException ioe) {
} throw ioe;
catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
throw new IOException(e); throw new IOException(e);
} }
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T, R> T readValue(JSONObject json, Class<T> objClass) throws IOException { public <T, R> T readValue(JSONObject json, Class<T> objClass) throws IOException {
try { try {
//TODO Iterate through json object values and call the JsonAnySetter method on the unknown ones. //TODO Iterate through json object values and call the JsonAnySetter method on the unknown ones.
T obj = objClass.newInstance(); T obj = objClass.newInstance();
for (Field f : objClass.getFields()) { for (Field f : objClass.getFields()) {
Annotation a = f.getAnnotation(JsonProperty.class); Annotation a = f.getAnnotation(JsonProperty.class);
if (List.class.equals(f.getType()) && (json.optJSONArray(((JsonProperty) a).value()) != null)) { // It's a list. if (List.class.equals(f.getType()) && (json.optJSONArray(((JsonProperty) a).value()) != null)) { // It's a list.
JSONArray jsonArray = json.optJSONArray(((JsonProperty) a).value()); JSONArray jsonArray = json.optJSONArray(((JsonProperty) a).value());
ParameterizedType listType = (ParameterizedType) f.getGenericType(); ParameterizedType listType = (ParameterizedType) f.getGenericType();
Class<?> subObj = (Class<?>) listType.getActualTypeArguments()[0]; Class<?> subObj = (Class<?>) listType.getActualTypeArguments()[0];
List<R> subObjList = ((Class<List<R>>) f.getType()).newInstance(); List<R> subObjList = ((Class<List<R>>) f.getType()).newInstance();
for (int i = 0; i < jsonArray.length(); i++) { for (int i = 0; i < jsonArray.length(); i++) {
subObjList.add((R) readValue(jsonArray.getJSONObject(i), subObj)); subObjList.add((R) readValue(jsonArray.getJSONObject(i), subObj));
} }
f.set(obj, subObjList); f.set(obj, subObjList);
} } else if (a != null) {
else if (a != null) { f.set(obj, json.opt(((JsonProperty) a).value()));
f.set(obj, json.opt(((JsonProperty) a).value())); }
} }
} return obj;
return obj; } catch (IOException ioe) {
} throw ioe;
catch (IOException ioe) { } catch (Exception e) {
throw ioe; e.printStackTrace();
} throw new IOException(e);
catch (Exception e) { }
e.printStackTrace(); }
throw new IOException(e);
}
}
} }
+13 -2
View File
@@ -5,9 +5,20 @@ Author: Stuart Boston (Omertron AT Gmail DOT com)
This API uses the [TheMovieDB.org API](http://api.themoviedb.org/) This API uses the [TheMovieDB.org API](http://api.themoviedb.org/)
Originally written for use by Yet Another Movie Jukebox [(YAMJ)](http://code.google.com/p/moviejukebox/) Originally written for use by YetAnotherMovieJukebox ([YAMJv2](https://github.com/YAMJ/yamj-v2) & [YAMJv3](https://github.com/YAMJ/yamj-v3)), but anyone can feel free to use it for other projects as well.
[![Build Status](http://jenkins.omertron.com/job/API-TheMovieDb/badge/icon)](http://jenkins.omertron.com/job/API-TheMovieDb)
***
TMDB TV Support
===============
Release 4.0 of the API now includes TV shows.
This has resulted in a complete re-write of the API and many of the methods and models have been re-written to support the new TV calls.
But anyone can use it for other projects as well.
*** ***
### TheMovieDB.org ### TheMovieDB.org
This is an excellent open database for movie and film content. This is an excellent open database for movie and film content.
+234 -212
View File
@@ -4,7 +4,7 @@
<parent> <parent>
<groupId>org.sonatype.oss</groupId> <groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId> <artifactId>oss-parent</artifactId>
<version>7</version> <version>9</version>
</parent> </parent>
<prerequisites> <prerequisites>
@@ -13,7 +13,7 @@
<groupId>com.omertron</groupId> <groupId>com.omertron</groupId>
<artifactId>themoviedbapi</artifactId> <artifactId>themoviedbapi</artifactId>
<version>3.7</version> <version>4.4-SNAPSHOT</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>API-The MovieDB</name> <name>API-The MovieDB</name>
@@ -71,6 +71,14 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<distribution.format>zip</distribution.format> <distribution.format>zip</distribution.format>
<version.jackson>2.10.0</version.jackson>
<version.slf4j>1.7.25</version.slf4j>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyy-MM-dd-HHmm</maven.build.timestamp.format>
<!--Turn off javadoc errors-->
<additionalparam>-Xdoclint:none</additionalparam>
</properties> </properties>
<dependencies> <dependencies>
@@ -78,249 +86,67 @@
<dependency> <dependency>
<groupId>junit</groupId> <groupId>junit</groupId>
<artifactId>junit</artifactId> <artifactId>junit</artifactId>
<version>4.11</version> <version>4.13.1</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!--JSON--> <!--JSON-->
<dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId> <artifactId>jackson-core</artifactId>
<version>2.2.3</version> <version>${version.jackson}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId> <artifactId>jackson-annotations</artifactId>
<version>2.2.3</version> <version>${version.jackson}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId> <artifactId>jackson-databind</artifactId>
<version>2.2.3</version> <version>${version.jackson}</version>
</dependency> </dependency>
<!--LOGGING--> <!--LOGGING-->
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
<version>1.7.5</version> <version>${version.slf4j}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId> <artifactId>slf4j-jdk14</artifactId>
<version>1.7.5</version> <version>${version.slf4j}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!--COMMON HTTP TOOLS--> <!--COMMON HTTP TOOLS-->
<dependency> <dependency>
<groupId>org.yamj</groupId> <groupId>org.yamj</groupId>
<artifactId>api-common</artifactId> <artifactId>api-common</artifactId>
<version>1.0</version> <version>2.1</version>
</dependency>
<!-- Apache Utils -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
<scope>test</scope>
</dependency> </dependency>
</dependencies> </dependencies>
<build>
<finalName>${project.artifactId}-${project.version}-${buildNumber}</finalName>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.2</version>
<configuration>
<shortRevisionLength>10</shortRevisionLength>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
<timestampFormat>{0,date,yyyy-MM-dd HH:mm:ss}</timestampFormat>
</configuration>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<failOnError>true</failOnError>
<verbose>true</verbose>
<!-- excludes><exclude>**/*</exclude></excludes -->
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifestEntries>
<Specification-Title>${project.name}</Specification-Title>
<Specification-Version>${project.version}</Specification-Version>
<Implementation-Version>${buildNumber}</Implementation-Version>
<Implementation-Title>${timestamp}</Implementation-Title>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14.1</version>
<configuration>
<!-- To skip tests by default -->
<skipTests>${skipTests}</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>create-version-txt</id>
<phase>generate-resources</phase>
<configuration>
<target>
<property name="version_file" value="${project.build.directory}/version.txt" />
<property name="header_line" value="The MovieDb API${line.separator}" />
<property name="build_date_line" value="Build Date: ${timestamp}${line.separator}" />
<property name="version_line" value="Version: ${project.version}${line.separator}" />
<property name="buildnumber_line" value="Git-SHA: ${buildNumber}${line.separator}" />
<echo>Writing version file: ${version_file}</echo>
<echo file="${version_file}" append="false">${header_line}</echo>
<echo file="${version_file}" append="true">${build_date_line}</echo>
<echo file="${version_file}" append="true">${version_line}</echo>
<echo file="${version_file}" append="true">${buildnumber_line}</echo>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>distro-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/main/resources/bin.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.3</version>
<configuration>
<reportPlugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.2</version>
<reports>
<report>index</report>
<report>scm</report>
<report>issue-tracking</report>
<report>help</report>
<report>dependency-convergence</report>
<report>summary</report>
<report>dependency-management</report>
<report>dependencies</report>
<report>license</report>
<report>modules</report>
</reports>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9</version>
</plugin>
</reportPlugins>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>2.5</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.7</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.4</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.4</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
</plugin>
</plugins>
<extensions>
<extension>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-provider-gitexe</artifactId>
<version>1.8.1</version>
</extension>
<extension>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-manager-plexus</artifactId>
<version>1.8.1</version>
</extension>
<extension>
<groupId>org.kathrynhuxtable.maven.wagon</groupId>
<artifactId>wagon-gitsite</artifactId>
<version>0.3.1</version>
</extension>
</extensions>
</build>
<profiles> <profiles>
<profile>
<id>disable-java8-doclint</id>
<activation>
<jdk>[1.8,)</jdk>
</activation>
<properties>
<additionalparam>-Xdoclint:none</additionalparam>
</properties>
</profile>
<profile> <profile>
<id>release-sign-artifacts</id> <id>release-sign-artifacts</id>
<activation> <activation>
@@ -348,4 +174,200 @@
</profile> </profile>
</profiles> </profiles>
<build>
<finalName>${project.artifactId}-${project.version}-${timestamp}-${git.commit.id.abbrev}</finalName>
<resources>
<resource>
<directory>src/main/resources/</directory>
<filtering>true</filtering>
<includes>
<include>version.txt</include>
</includes>
</resource>
</resources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.7</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
</plugin>
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.2.4</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>revision</goal>
</goals>
</execution>
</executions>
<configuration>
<dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
<dateFormat>yyyy-MM-dd HH:mm:ss z</dateFormat>
<abbrevLength>7</abbrevLength>
<injectAllReactorProjects>true</injectAllReactorProjects>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Specification-Title>${project.name}</Specification-Title>
<Specification-Version>${project.version}</Specification-Version>
<Implementation-Version>${buildNumber}</Implementation-Version>
<Implementation-Title>${timestamp}</Implementation-Title>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!-- To skip tests by default -->
<skipTests>${skipTests}</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>distro-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/main/resources/bin.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<failOnError>true</failOnError>
<verbose>true</verbose>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<configuration>
<reportPlugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<reports>
<report>index</report>
<report>scm</report>
<report>issue-tracking</report>
<report>help</report>
<report>dependency-convergence</report>
<report>summary</report>
<report>dependency-management</report>
<report>dependencies</report>
<report>license</report>
<report>modules</report>
</reports>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
</plugin>
</reportPlugins>
</configuration>
</plugin>
</plugins>
<extensions>
<extension>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-provider-gitexe</artifactId>
<version>1.9.5</version>
</extension>
<extension>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-manager-plexus</artifactId>
<version>1.9.5</version>
</extension>
<extension>
<groupId>org.kathrynhuxtable.maven.wagon</groupId>
<artifactId>wagon-gitsite</artifactId>
<version>0.3.1</version>
</extension>
</extensions>
</build>
</project> </project>
@@ -0,0 +1,61 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi;
import com.omertron.themoviedbapi.interfaces.AppendToResponseMethod;
/**
* Simple string builder for the Append To Response methods
*
* @author Stuart.Boston
*/
public class AppendToResponseBuilder {
private final StringBuilder response;
/**
* Construct the builder with the first method
*
* @param method method
*/
public AppendToResponseBuilder(AppendToResponseMethod method) {
response = new StringBuilder(method.getPropertyString());
}
/**
* Generate the string
*
* @return ATR string
*/
public String build() {
return response.toString();
}
/**
* Add a method to the list
*
* @param method method
* @return builder
*/
public AppendToResponseBuilder add(AppendToResponseMethod method) {
response.append(",").append(method.getPropertyString());
return this;
}
}
@@ -0,0 +1,141 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi;
import com.omertron.themoviedbapi.model.movie.MovieInfo;
import org.apache.commons.lang3.StringUtils;
/**
* Compare various objects to see if the are logically the same.
*
* Allows for some variance of the details
*
* @author Stuart.Boston
*/
public class Compare {
// Constants
private static final int YEAR_LENGTH = 4;
private Compare() {
throw new UnsupportedOperationException("Utility class");
}
/**
* Compare the MovieDB object with a title and year
*
* @param moviedb The moviedb object to compare too
* @param title The title of the movie to compare
* @param year The year of the movie to compare exact match
* @return True if there is a match, False otherwise.
*/
public static boolean movies(final MovieInfo moviedb, final String title, final String year) {
return movies(moviedb, title, year, 0, true);
}
/**
* Compare the MovieDB object with a title and year
*
* @param moviedb The moviedb object to compare too
* @param title The title of the movie to compare
* @param year The year of the movie to compare
* @param maxDistance The Levenshtein Distance between the two titles. 0 =
* exact match
* @param caseSensitive true if the comparison is to be case sensitive
* @return True if there is a match, False otherwise.
*/
public static boolean movies(final MovieInfo moviedb, final String title, final String year, int maxDistance, boolean caseSensitive) {
if ((moviedb == null) || (StringUtils.isBlank(title))) {
return false;
}
String primaryTitle, firstCompareTitle, secondCompareTitle;
if (caseSensitive) {
primaryTitle = title;
firstCompareTitle = moviedb.getOriginalTitle();
secondCompareTitle = moviedb.getTitle();
} else {
primaryTitle = title.toLowerCase();
firstCompareTitle = moviedb.getTitle().toLowerCase();
secondCompareTitle = moviedb.getOriginalTitle().toLowerCase();
}
if (isValidYear(year) && isValidYear(moviedb.getReleaseDate())) {
// Compare with year
String movieYear = moviedb.getReleaseDate().substring(0, YEAR_LENGTH);
return movieYear.equals(year) && compareTitles(primaryTitle, firstCompareTitle, secondCompareTitle, maxDistance);
}
// Compare without year
return compareTitles(primaryTitle, firstCompareTitle, secondCompareTitle, maxDistance);
}
/**
* Compare a title with two other titles.
*
* @param primaryTitle Primary title
* @param firstCompareTitle First title to compare with
* @param secondCompareTitle Second title to compare with
* @param maxDistance Maximum difference between the titles
* @return
*/
private static boolean compareTitles(String primaryTitle, String firstCompareTitle, String secondCompareTitle, int maxDistance) {
// Compare with the first title
if (compareDistance(primaryTitle, firstCompareTitle, maxDistance)) {
return true;
}
// Compare with the other title
return compareDistance(primaryTitle, secondCompareTitle, maxDistance);
}
/**
* Compare the MovieDB object with a title and year, case sensitive
*
* @param moviedb movieinfo
* @param title title
* @param year year
* @param maxDistance maximum distance
* @return true if matched
*/
public static boolean movies(final MovieInfo moviedb, final String title, final String year, int maxDistance) {
return Compare.movies(moviedb, title, year, maxDistance, true);
}
/**
* Compare the Levenshtein Distance between the two strings
*
* @param title1 title
* @param title2 title
* @param distance max distance
*/
private static boolean compareDistance(final String title1, final String title2, int distance) {
return StringUtils.getLevenshteinDistance(title1, title2) <= distance;
}
/**
* Check the year is not blank or UNKNOWN
*
* @param year year
*/
private static boolean isValidYear(final String year) {
return StringUtils.isNotBlank(year) && !"UNKNOWN".equals(year);
}
}
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -19,69 +19,45 @@
*/ */
package com.omertron.themoviedbapi; package com.omertron.themoviedbapi;
public class MovieDbException extends Exception { import java.net.URL;
import org.yamj.api.common.exception.ApiException;
import org.yamj.api.common.exception.ApiExceptionType;
private static final long serialVersionUID = 1L; public class MovieDbException extends ApiException {
public enum MovieDbExceptionType { public MovieDbException(ApiExceptionType exceptionType, String response) {
/* super(exceptionType, response);
* Unknown error occured
*/
UNKNOWN_CAUSE,
/*
* URL is invalid
*/
INVALID_URL,
/*
* Page not found
*/
HTTP_404_ERROR,
/*
* The movie id was not found
*/
MOVIE_ID_NOT_FOUND,
/*
* Mapping failed from target to internal onbjects
*/
MAPPING_FAILED,
/*
* Error connecting to the service
*/
CONNECTION_ERROR,
/*
* Image was invalid
*/
INVALID_IMAGE,
/*
* Autorisation rejected
*/
AUTHORISATION_FAILURE,
/*
* Service Unavailable, usually temporary
*/
HTTP_503_ERROR;
} }
private final MovieDbExceptionType exceptionType; public MovieDbException(ApiExceptionType exceptionType, String response, URL url) {
private final String response; super(exceptionType, response, url);
public MovieDbException(final MovieDbExceptionType exceptionType, final String response) {
super();
this.exceptionType = exceptionType;
this.response = response;
} }
public MovieDbException(final MovieDbExceptionType exceptionType, final String response, final Throwable cause) { public MovieDbException(ApiExceptionType exceptionType, String response, int responseCode, URL url) {
super(cause); super(exceptionType, response, responseCode, url);
this.exceptionType = exceptionType;
this.response = response;
} }
public MovieDbExceptionType getExceptionType() { public MovieDbException(ApiExceptionType exceptionType, String response, String url) {
return exceptionType; super(exceptionType, response, url);
} }
public String getResponse() { public MovieDbException(ApiExceptionType exceptionType, String response, int responseCode, String url) {
return response; super(exceptionType, response, responseCode, url);
}
public MovieDbException(ApiExceptionType exceptionType, String response, URL url, Throwable cause) {
super(exceptionType, response, url, cause);
}
public MovieDbException(ApiExceptionType exceptionType, String response, int responseCode, URL url, Throwable cause) {
super(exceptionType, response, responseCode, url, cause);
}
public MovieDbException(ApiExceptionType exceptionType, String response, String url, Throwable cause) {
super(exceptionType, response, url, cause);
}
public MovieDbException(ApiExceptionType exceptionType, String response, int responseCode, String url, Throwable cause) {
super(exceptionType, response, responseCode, url, cause);
} }
} }
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,64 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.enumeration;
import org.apache.commons.lang3.StringUtils;
/**
* ArtworkType enum List of the artwork types that are available
*/
public enum ArtworkType {
/**
* Poster artwork
*/
POSTER,
/**
* Fanart/backdrop
*/
BACKDROP,
/**
* Person image
*/
PROFILE,
/**
* Still (Video image)
*/
STILL;
/**
* Convert a string into an Enum type
*
* @param artworkType String to convert to enum
* @return enum version of param
* @throws IllegalArgumentException If type is not recognised
*
*/
public static ArtworkType fromString(String artworkType) {
if (StringUtils.isNotBlank(artworkType)) {
try {
return ArtworkType.valueOf(artworkType.trim().toUpperCase());
} catch (IllegalArgumentException ex) {
throw new IllegalArgumentException("ArtworkType " + artworkType + " does not exist.", ex);
}
}
throw new IllegalArgumentException("ArtworkType must not be null");
}
}
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,14 +17,14 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.enumeration;
/** /**
* @author stuart.boston *
* @author Stuart
*/ */
public enum PersonType { public enum CreditType {
CAST, // A member of the cast CAST,
CREW, // A member of the crew CREW;
PERSON // No specific type
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,14 +17,22 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.enumeration;
/** /**
* ArtworkType enum List of the artwork types that are available *
* @author Stuart
*/ */
public enum ArtworkType { public enum ExternalSource {
FREEBASE_ID,
FREEBASE_MID,
IMDB_ID,
TVDB_ID,
TVRAGE_ID;
public String getPropertyString() {
return this.name().toLowerCase();
}
POSTER, // Poster artwork
BACKDROP, // Fanart/backdrop
PROFILE // Person image
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,31 +17,32 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.results; package com.omertron.themoviedbapi.enumeration;
import java.util.HashMap; public enum Gender {
import java.util.Map; MALE(2),
FEMALE(1),
UNKNOWN(0);
/** private final int type;
* Map of the results from TheMovieDb
*
* @author Stuart
* @param <K>
* @param <V>
*/
public final class TmdbResultsMap<K, V> extends TmdbResults {
private Map<K, V> results; private Gender(int type) {
this.type = type;
public TmdbResultsMap(Map<K, V> resultsMap) {
results = new HashMap<K, V>(resultsMap);
} }
public Map<K, V> getResults() { /**
return results; * Get the gender from an integer type
*
* @param type Integer to convert to enum
* @return enum version of param
*/
public static Gender fromInteger(int type) {
for (Gender gender : Gender.values()) {
if (gender.type == type) {
return gender;
}
}
return UNKNOWN;
} }
public void setResults(Map<K, V> results) {
this.results = results;
}
} }
@@ -0,0 +1,66 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.enumeration;
import org.apache.commons.lang3.StringUtils;
/**
* Media type options
*
* @author Stuart
*/
public enum MediaType {
/**
* Movie media type
*/
MOVIE,
/**
* TV Show media type
*/
TV,
/**
* TV Season media type
*/
SEASON,
/**
* TV Episode media type
*/
EPISODE;
/**
* Convert a string into an Enum type
*
* @param mediaType String to convert to enum
* @return enum version of param
* @throws IllegalArgumentException If type is not recognised
*
*/
public static MediaType fromString(String mediaType) {
if (StringUtils.isNotBlank(mediaType)) {
try {
return MediaType.valueOf(mediaType.trim().toUpperCase());
} catch (IllegalArgumentException ex) {
throw new IllegalArgumentException("MediaType " + mediaType + " does not exist.", ex);
}
}
throw new IllegalArgumentException("MediaType must not be null");
}
}
@@ -0,0 +1,73 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.enumeration;
import com.omertron.themoviedbapi.interfaces.AppendToResponseMethod;
import org.apache.commons.lang3.StringUtils;
/**
* List of all "Append To Response" movie methods
*
* @author Stuart
*/
public enum MovieMethod implements AppendToResponseMethod {
ALTERNATIVE_TITLES,
CHANGES,
CREDITS,
IMAGES,
KEYWORDS,
LISTS,
RECOMMENDATIONS,
RELEASES,
REVIEWS,
SIMILAR,
TRANSLATIONS,
VIDEOS;
/**
* Get the string to use in the URL
*
* @return the string representation of the enum
*/
@Override
public String getPropertyString() {
return this.name().toLowerCase();
}
/**
* Convert a string into an Enum type
*
* @param method String to convert to enum
* @return enum version of param
* @throws IllegalArgumentException If type is not recognised
*
*/
public static MovieMethod fromString(String method) {
if (StringUtils.isNotBlank(method)) {
try {
return MovieMethod.valueOf(method.trim().toUpperCase());
} catch (IllegalArgumentException ex) {
throw new IllegalArgumentException("Method " + method + " does not exist.", ex);
}
}
throw new IllegalArgumentException("Method must not be null");
}
}
@@ -0,0 +1,68 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.enumeration;
import com.omertron.themoviedbapi.interfaces.AppendToResponseMethod;
import org.apache.commons.lang3.StringUtils;
/**
* List of People methods
*
* @author Stuart
*/
public enum PeopleMethod implements AppendToResponseMethod {
CHANGES,
COMBINED_CREDITS,
EXTERNAL_IDS,
IMAGES,
MOVIE_CREDITS,
TAGGED_IMAGES,
TV_CREDITS;
/**
* Get the string to use in the URL
*
* @return the string representation of the enum
*/
@Override
public String getPropertyString() {
return this.name().toLowerCase();
}
/**
* Convert a string into an Enum type
*
* @param method String to convert to enum
* @return enum version of param
* @throws IllegalArgumentException If type is not recognised
*
*/
public static PeopleMethod fromString(String method) {
if (StringUtils.isNotBlank(method)) {
try {
return PeopleMethod.valueOf(method.trim().toUpperCase());
} catch (IllegalArgumentException ex) {
throw new IllegalArgumentException("Method " + method + " does not exist.", ex);
}
}
throw new IllegalArgumentException("Method must not be null");
}
}
@@ -0,0 +1,57 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.enumeration;
/**
* Release Type for the video
*
* @author stuar
*/
public enum ReleaseType {
PREMIERE(1),
THEATRICAL_LIMITED(2),
THEATRICAL(3),
DIGITAL(4),
PHYSICAL(5),
TV(6),
UNKNOWN(0);
private final int type;
private ReleaseType(int type) {
this.type = type;
}
/**
* Get the Release Type from an integer type
*
* @param type Integer to convert to enum
* @return enum version of param
*/
public static ReleaseType fromInteger(int type) {
for (ReleaseType rt : ReleaseType.values()) {
if (rt.type == type) {
return rt;
}
}
return UNKNOWN;
}
}
@@ -0,0 +1,35 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.enumeration;
/**
*
* @author Stuart
*/
public enum SearchType {
PHRASE,
NGRAM;
public String getPropertyString() {
return this.name().toLowerCase();
}
}
@@ -0,0 +1,44 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.enumeration;
public enum SortBy {
CREATED_AT_ASC,
CREATED_AT_DESC,
POPULARITY_ASC,
POPULARITY_DESC,
RELEASE_DATE_ASC,
RELEASE_DATE_DESC,
REVENUE_ASC,
REVENUE_DESC,
PRIMARY_RELEASE_DATE_ASC,
PRIMARY_RELEASE_DATE_DESC,
ORIGINAL_TITLE_ASC,
ORIGINAL_TITLE_DESC,
VOTE_AVERAGE_ASC,
VOTE_AVERAGE_DESC,
VOTE_COUNT_ASC,
VOTE_COUNT_DESC;
public String getPropertyString() {
return this.name().toLowerCase().replace("_asc", ".asc").replaceAll("_desc", ".desc");
}
}
@@ -0,0 +1,65 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.enumeration;
import com.omertron.themoviedbapi.interfaces.AppendToResponseMethod;
import org.apache.commons.lang3.StringUtils;
/**
* List of TV methods
*
* @author Stuart
*/
public enum TVEpisodeMethod implements AppendToResponseMethod {
CREDITS,
EXTERNAL_IDS,
IMAGES,
VIDEOS;
/**
* Get the string to use in the URL
*
* @return the string representation of the enum
*/
@Override
public String getPropertyString() {
return this.name().toLowerCase();
}
/**
* Convert a string into an Enum type
*
* @param method String to convert to enum
* @return enum version of param
* @throws IllegalArgumentException If type is not recognised
*
*/
public static TVEpisodeMethod fromString(String method) {
if (StringUtils.isNotBlank(method)) {
try {
return TVEpisodeMethod.valueOf(method.trim().toUpperCase());
} catch (IllegalArgumentException ex) {
throw new IllegalArgumentException("Method " + method + " does not exist.", ex);
}
}
throw new IllegalArgumentException("Method must not be null");
}
}
@@ -0,0 +1,71 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.enumeration;
import com.omertron.themoviedbapi.interfaces.AppendToResponseMethod;
import org.apache.commons.lang3.StringUtils;
/**
* List of TV methods
*
* @author Stuart
*/
public enum TVMethod implements AppendToResponseMethod {
ALTERNATIVE_TITLES,
CHANGES,
CONTENT_RATINGS,
CREDITS,
EXTERNAL_IDS,
IMAGES,
KEYWORDS,
SIMILAR,
TRANSLATIONS,
VIDEOS;
/**
* Get the string to use in the URL
*
* @return
*/
@Override
public String getPropertyString() {
return this.name().toLowerCase();
}
/**
* Convert a string into an Enum type
*
* @param method
* @return
* @throws IllegalArgumentException If type is not recognised
*
*/
public static TVMethod fromString(String method) {
if (StringUtils.isNotBlank(method)) {
try {
return TVMethod.valueOf(method.trim().toUpperCase());
} catch (IllegalArgumentException ex) {
throw new IllegalArgumentException("Method " + method + " does not exist.", ex);
}
}
throw new IllegalArgumentException("Method must not be null");
}
}
@@ -0,0 +1,65 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.enumeration;
import com.omertron.themoviedbapi.interfaces.AppendToResponseMethod;
import org.apache.commons.lang3.StringUtils;
/**
* List of TV methods
*
* @author Stuart
*/
public enum TVSeasonMethod implements AppendToResponseMethod {
CREDITS,
EXTERNAL_IDS,
IMAGES,
VIDEOS;
/**
* Get the string to use in the URL
*
* @return
*/
@Override
public String getPropertyString() {
return this.name().toLowerCase();
}
/**
* Convert a string into an Enum type
*
* @param method
* @return
* @throws IllegalArgumentException If type is not recognised
*
*/
public static TVSeasonMethod fromString(String method) {
if (StringUtils.isNotBlank(method)) {
try {
return TVSeasonMethod.valueOf(method.trim().toUpperCase());
} catch (IllegalArgumentException ex) {
throw new IllegalArgumentException("Method " + method + " does not exist.", ex);
}
}
throw new IllegalArgumentException("Method must not be null");
}
}
@@ -0,0 +1,32 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.interfaces;
/**
* Interface to indicate that the object has append to response methods
*
* @author Stuart
* @param <T> Method for Append To Response
*/
public interface AppendToResponse<T extends AppendToResponseMethod> {
boolean hasMethod(T method);
}
@@ -0,0 +1,25 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.interfaces;
public interface AppendToResponseMethod {
String getPropertyString();
}
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,9 +17,9 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.wrapper; package com.omertron.themoviedbapi.interfaces;
public interface IWrapperId { public interface Identification {
int getId(); int getId();
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,9 +17,11 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.wrapper; package com.omertron.themoviedbapi.interfaces;
public interface IWrapperDates { import com.omertron.themoviedbapi.results.ResultDates;
public interface WrapperDates {
ResultDates getDates(); ResultDates getDates();
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,9 +17,9 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.wrapper; package com.omertron.themoviedbapi.interfaces;
public interface IWrapperPages { public interface WrapperPages {
int getPage(); int getPage();
@@ -0,0 +1,200 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.omertron.themoviedbapi.MovieDbException;
import com.omertron.themoviedbapi.model.artwork.ArtworkMedia;
import com.omertron.themoviedbapi.model.change.ChangeKeyItem;
import com.omertron.themoviedbapi.model.change.ChangeListItem;
import com.omertron.themoviedbapi.model.collection.Collection;
import com.omertron.themoviedbapi.model.company.Company;
import com.omertron.themoviedbapi.model.keyword.Keyword;
import com.omertron.themoviedbapi.model.list.UserList;
import com.omertron.themoviedbapi.model.media.AlternativeTitle;
import com.omertron.themoviedbapi.model.movie.MovieBasic;
import com.omertron.themoviedbapi.model.movie.MovieInfo;
import com.omertron.themoviedbapi.model.movie.ReleaseDates;
import com.omertron.themoviedbapi.model.person.ContentRating;
import com.omertron.themoviedbapi.model.person.PersonInfo;
import com.omertron.themoviedbapi.model.person.PersonFind;
import com.omertron.themoviedbapi.model.review.Review;
import com.omertron.themoviedbapi.model.tv.TVBasic;
import com.omertron.themoviedbapi.model.tv.TVInfo;
import com.omertron.themoviedbapi.results.ResultList;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.MethodSub;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.TmdbParameters;
import com.omertron.themoviedbapi.results.WrapperChanges;
import com.omertron.themoviedbapi.results.WrapperGenericList;
import java.io.IOException;
import java.io.Serializable;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Abstract methods
*
* @author Stuart
*/
public class AbstractMethod {
// The API key to be used
protected final String apiKey;
// The HttpTools to use
protected final HttpTools httpTools;
// Jackson JSON configuration
protected static final ObjectMapper MAPPER = new ObjectMapper();
private static final Map<Class<? extends Serializable>, TypeReference<? extends WrapperGenericList<? extends Serializable>>> TYPE_REFS = new HashMap<>();
static {
TYPE_REFS.put(MovieBasic.class, new TypeReference<WrapperGenericList<MovieBasic>>() {
});
TYPE_REFS.put(TVBasic.class, new TypeReference<WrapperGenericList<TVBasic>>() {
});
TYPE_REFS.put(UserList.class, new TypeReference<WrapperGenericList<UserList>>() {
});
TYPE_REFS.put(Company.class, new TypeReference<WrapperGenericList<Company>>() {
});
TYPE_REFS.put(Collection.class, new TypeReference<WrapperGenericList<Collection>>() {
});
TYPE_REFS.put(Keyword.class, new TypeReference<WrapperGenericList<Keyword>>() {
});
TYPE_REFS.put(MovieInfo.class, new TypeReference<WrapperGenericList<MovieInfo>>() {
});
TYPE_REFS.put(PersonInfo.class, new TypeReference<WrapperGenericList<PersonInfo>>() {
});
TYPE_REFS.put(PersonFind.class, new TypeReference<WrapperGenericList<PersonFind>>() {
});
TYPE_REFS.put(Review.class, new TypeReference<WrapperGenericList<Review>>() {
});
TYPE_REFS.put(ChangeListItem.class, new TypeReference<WrapperGenericList<ChangeListItem>>() {
});
TYPE_REFS.put(ArtworkMedia.class, new TypeReference<WrapperGenericList<ArtworkMedia>>() {
});
TYPE_REFS.put(ContentRating.class, new TypeReference<WrapperGenericList<ContentRating>>() {
});
TYPE_REFS.put(TVInfo.class, new TypeReference<WrapperGenericList<TVInfo>>() {
});
TYPE_REFS.put(AlternativeTitle.class, new TypeReference<WrapperGenericList<AlternativeTitle>>() {
});
TYPE_REFS.put(ReleaseDates.class, new TypeReference<WrapperGenericList<ReleaseDates>>() {
});
}
/**
* Default constructor for the methods
*
* @param apiKey
* @param httpTools
*/
public AbstractMethod(String apiKey, HttpTools httpTools) {
this.apiKey = apiKey;
this.httpTools = httpTools;
}
/**
* Helper function to get a pre-generated TypeReference for a class
*
* @param aClass
* @return
* @throws MovieDbException
*/
protected static <T> TypeReference<? extends WrapperGenericList<T>> getTypeReference(Class<T> aClass) throws MovieDbException {
if (TYPE_REFS.containsKey(aClass)) {
return (TypeReference<? extends WrapperGenericList<T>>) TYPE_REFS.get(aClass);
} else {
throw new MovieDbException(ApiExceptionType.UNKNOWN_CAUSE, "Class type reference for '" + aClass.getSimpleName() + "' not found!");
}
}
/**
* Process the wrapper list and return the results
*
* @param <T> Type of list to process
* @param typeRef
* @param url URL of the page (Error output only)
* @param errorMessageSuffix Error message to output (Error output only)
* @return
* @throws MovieDbException
*/
protected <T> List<T> processWrapperList(TypeReference<? extends WrapperGenericList<T>> typeRef, URL url, String errorMessageSuffix) throws MovieDbException {
WrapperGenericList<T> val = processWrapper(typeRef, url, errorMessageSuffix);
return val.getResults();
}
/**
* Process the wrapper list and return the whole wrapper
*
* @param <T> Type of list to process
* @param typeRef
* @param url URL of the page (Error output only)
* @param errorMessageSuffix Error message to output (Error output only)
* @return
* @throws MovieDbException
*/
protected <T> WrapperGenericList<T> processWrapper(TypeReference<? extends WrapperGenericList<T>> typeRef, URL url, String errorMessageSuffix) throws MovieDbException {
String webpage = httpTools.getRequest(url);
try {
// Due to type erasure, this doesn't work
// TypeReference<WrapperGenericList<T>> typeRef = new TypeReference<WrapperGenericList<T>>() {};
return MAPPER.readValue(webpage, typeRef);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get " + errorMessageSuffix, url, ex);
}
}
/**
*
* Look up the media's changes by ID
*
* @param mediaID
* @param startDate
* @param endDate
* @return
* @throws MovieDbException
*/
protected ResultList<ChangeKeyItem> getMediaChanges(int mediaID, String startDate, String endDate) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, mediaID);
parameters.add(Param.START_DATE, startDate);
parameters.add(Param.END_DATE, endDate);
URL url = new ApiUrl(apiKey, MethodBase.EPISODE).subMethod(MethodSub.CHANGES).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
WrapperChanges wrapper = MAPPER.readValue(webpage, WrapperChanges.class);
ResultList<ChangeKeyItem> results = new ResultList<>(wrapper.getChangedItems());
wrapper.setResultProperties(results);
return results;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get changes", url, ex);
}
}
}
@@ -0,0 +1,326 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.omertron.themoviedbapi.MovieDbException;
import com.omertron.themoviedbapi.enumeration.MediaType;
import com.omertron.themoviedbapi.enumeration.SortBy;
import com.omertron.themoviedbapi.model.StatusCode;
import com.omertron.themoviedbapi.model.account.Account;
import com.omertron.themoviedbapi.model.list.UserList;
import com.omertron.themoviedbapi.model.movie.MovieBasic;
import com.omertron.themoviedbapi.model.tv.TVBasic;
import com.omertron.themoviedbapi.results.ResultList;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.MethodSub;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.PostBody;
import com.omertron.themoviedbapi.tools.PostTools;
import com.omertron.themoviedbapi.tools.TmdbParameters;
import com.omertron.themoviedbapi.results.WrapperGenericList;
import java.io.IOException;
import java.net.URL;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Class to hold the Account Methods
*
* @author stuart.boston
*/
public class TmdbAccount extends AbstractMethod {
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbAccount(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* Get the basic information for an account. You will need to have a valid session id.
*
* @param sessionId
* @return
* @throws MovieDbException
*/
public Account getAccount(String sessionId) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.SESSION_ID, sessionId);
URL url = new ApiUrl(apiKey, MethodBase.ACCOUNT).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, Account.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get Account", url, ex);
}
}
/**
* Get all lists of a given user
*
* @param sessionId
* @param accountId
* @return The lists
* @throws MovieDbException
*/
public ResultList<UserList> getUserLists(String sessionId, int accountId) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.SESSION_ID, sessionId);
parameters.add(Param.ID, accountId);
URL url = new ApiUrl(apiKey, MethodBase.ACCOUNT).subMethod(MethodSub.LISTS).buildUrl(parameters);
WrapperGenericList<UserList> wrapper = processWrapper(getTypeReference(UserList.class), url, "user list");
return wrapper.getResultsList();
}
/**
* Get the list of favorite movies for an account.
*
* @param sessionId
* @param accountId
* @return
* @throws MovieDbException
*/
public ResultList<MovieBasic> getFavoriteMovies(String sessionId, int accountId) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.SESSION_ID, sessionId);
parameters.add(Param.ID, accountId);
URL url = new ApiUrl(apiKey, MethodBase.ACCOUNT).subMethod(MethodSub.FAVORITE_MOVIES).buildUrl(parameters);
WrapperGenericList<MovieBasic> wrapper = processWrapper(getTypeReference(MovieBasic.class), url, "favorite movies");
return wrapper.getResultsList();
}
/**
* Get the list of favorite TV series for an account.
*
* @param sessionId
* @param accountId
* @return
* @throws MovieDbException
*/
public ResultList<TVBasic> getFavoriteTv(String sessionId, int accountId) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.SESSION_ID, sessionId);
parameters.add(Param.ID, accountId);
URL url = new ApiUrl(apiKey, MethodBase.ACCOUNT).subMethod(MethodSub.FAVORITE_TV).buildUrl(parameters);
WrapperGenericList<TVBasic> wrapper = processWrapper(getTypeReference(TVBasic.class), url, "favorite TV shows");
return wrapper.getResultsList();
}
/**
* Add or remove a movie to an accounts favorite list.
*
* @param sessionId
* @param accountId
* @param mediaType
* @param mediaId
* @param setFavorite
* @return
* @throws MovieDbException
*/
public StatusCode modifyFavoriteStatus(String sessionId, int accountId, MediaType mediaType, int mediaId, boolean setFavorite) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.SESSION_ID, sessionId);
parameters.add(Param.ID, accountId);
String jsonBody = new PostTools()
.add(PostBody.MEDIA_TYPE, mediaType.toString().toLowerCase())
.add(PostBody.MEDIA_ID, mediaId)
.add(PostBody.FAVORITE, setFavorite)
.build();
URL url = new ApiUrl(apiKey, MethodBase.ACCOUNT).subMethod(MethodSub.FAVORITE).buildUrl(parameters);
String webpage = httpTools.postRequest(url, jsonBody);
try {
return MAPPER.readValue(webpage, StatusCode.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to set favorite status", url, ex);
}
}
/**
* Get the list of rated movies (and associated rating) for an account.
*
* @param sessionId
* @param accountId
* @param page
* @param sortBy
* @param language
* @return
* @throws MovieDbException
*/
public ResultList<MovieBasic> getRatedMovies(String sessionId, int accountId, Integer page, String sortBy, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.SESSION_ID, sessionId);
parameters.add(Param.ID, accountId);
parameters.add(Param.PAGE, page);
parameters.add(Param.SORT_BY, sortBy);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.ACCOUNT).subMethod(MethodSub.RATED_MOVIES).buildUrl(parameters);
WrapperGenericList<MovieBasic> wrapper = processWrapper(getTypeReference(MovieBasic.class), url, "rated movies");
return wrapper.getResultsList();
}
/**
* Get the list of rated TV shows (and associated rating) for an account.
*
* @param sessionId
* @param accountId
* @param page
* @param sortBy
* @param language
* @return
* @throws MovieDbException
*/
public ResultList<TVBasic> getRatedTV(String sessionId, int accountId, Integer page, String sortBy, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.SESSION_ID, sessionId);
parameters.add(Param.ID, accountId);
parameters.add(Param.PAGE, page);
parameters.add(Param.SORT_BY, sortBy);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.ACCOUNT).subMethod(MethodSub.RATED_TV).buildUrl(parameters);
WrapperGenericList<TVBasic> wrapper = processWrapper(getTypeReference(TVBasic.class), url, "rated TV shows");
return wrapper.getResultsList();
}
/**
* Get the list of movies on an accounts watch list.
*
* @param sessionId
* @param accountId
* @param page
* @param sortBy
* @param language
* @return The watch list of the user
* @throws MovieDbException
*/
public ResultList<MovieBasic> getWatchListMovie(String sessionId, int accountId, Integer page, String sortBy, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.SESSION_ID, sessionId);
parameters.add(Param.ID, accountId);
parameters.add(Param.PAGE, page);
parameters.add(Param.SORT_BY, sortBy);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.ACCOUNT).subMethod(MethodSub.WATCHLIST_MOVIES).buildUrl(parameters);
WrapperGenericList<MovieBasic> wrapper = processWrapper(getTypeReference(MovieBasic.class), url, "movie watch list");
return wrapper.getResultsList();
}
/**
* Get the list of movies on an accounts watch list.
*
* @param sessionId
* @param accountId
* @param page
* @param sortBy
* @param language
* @return The watch list of the user
* @throws MovieDbException
*/
public ResultList<TVBasic> getWatchListTV(String sessionId, int accountId, Integer page, String sortBy, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.SESSION_ID, sessionId);
parameters.add(Param.ID, accountId);
parameters.add(Param.PAGE, page);
parameters.add(Param.SORT_BY, sortBy);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.ACCOUNT).subMethod(MethodSub.WATCHLIST_TV).buildUrl(parameters);
WrapperGenericList<TVBasic> wrapper = processWrapper(getTypeReference(TVBasic.class), url, "TV watch list");
return wrapper.getResultsList();
}
/**
* Add or remove a movie to an accounts watch list.
*
* @param sessionId
* @param accountId
* @param movieId
* @param mediaType
* @param addToWatchlist
* @return
* @throws MovieDbException
*/
public StatusCode modifyWatchList(String sessionId, int accountId, MediaType mediaType, Integer movieId, boolean addToWatchlist) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.SESSION_ID, sessionId);
parameters.add(Param.ID, accountId);
String jsonBody = new PostTools()
.add(PostBody.MEDIA_TYPE, mediaType.toString().toLowerCase())
.add(PostBody.MEDIA_ID, movieId)
.add(PostBody.WATCHLIST, addToWatchlist)
.build();
URL url = new ApiUrl(apiKey, MethodBase.ACCOUNT).subMethod(MethodSub.WATCHLIST).buildUrl(parameters);
String webpage = httpTools.postRequest(url, jsonBody);
try {
return MAPPER.readValue(webpage, StatusCode.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to modify watch list", url, ex);
}
}
/**
* Get a list of rated movies for a specific guest session id.
*
* @param guestSessionId
* @param language
* @param page
* @param sortBy only CREATED_AT_ASC or CREATED_AT_DESC is supported
* @return
* @throws MovieDbException
*/
public ResultList<MovieBasic> getGuestRatedMovies(String guestSessionId, String language, Integer page, SortBy sortBy) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, guestSessionId);
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.PAGE, page);
if (sortBy != null) {
// Only created_at is supported
parameters.add(Param.SORT_BY, "created_at");
if (sortBy.getPropertyString().endsWith("asc")) {
parameters.add(Param.SORT_ORDER, "asc");
} else {
parameters.add(Param.SORT_ORDER, "desc");
}
}
URL url = new ApiUrl(apiKey, MethodBase.GUEST_SESSION).subMethod(MethodSub.RATED_MOVIES_GUEST).buildUrl(parameters);
WrapperGenericList<MovieBasic> wrapper = processWrapper(getTypeReference(MovieBasic.class), url, "Guest Session Movies");
return wrapper.getResultsList();
}
}
@@ -0,0 +1,170 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.omertron.themoviedbapi.MovieDbException;
import com.omertron.themoviedbapi.model.authentication.TokenAuthorisation;
import com.omertron.themoviedbapi.model.authentication.TokenSession;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.MethodSub;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.TmdbParameters;
import java.io.IOException;
import java.net.URL;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Class to hold the Authentication Methods
*
* @author stuart.boston
*/
public class TmdbAuthentication extends AbstractMethod {
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbAuthentication(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* This method is used to generate a valid request token for user based
* authentication.
*
* A request token is required in order to request a session id.
*
* You can generate any number of request tokens but they will expire after
* 60 minutes.
*
* As soon as a valid session id has been created the token will be
* destroyed.
*
* @return
* @throws MovieDbException
*/
public TokenAuthorisation getAuthorisationToken() throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
URL url = new ApiUrl(apiKey, MethodBase.AUTH).subMethod(MethodSub.TOKEN_NEW).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, TokenAuthorisation.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.AUTH_FAILURE, "Failed to get Authorisation Token", url, ex);
}
}
/**
* This method is used to generate a session id for user based
* authentication.
*
* A session id is required in order to use any of the write methods.
*
* @param token
* @return
* @throws MovieDbException
*/
public TokenSession getSessionToken(TokenAuthorisation token) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
if (!token.getSuccess()) {
throw new MovieDbException(ApiExceptionType.AUTH_FAILURE, "Authorisation token was not successful!");
}
parameters.add(Param.TOKEN, token.getRequestToken());
URL url = new ApiUrl(apiKey, MethodBase.AUTH).subMethod(MethodSub.SESSION_NEW).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, TokenSession.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get Session Token", url, ex);
}
}
/**
* This method is used to generate a session id for user based
* authentication. User must provide their username and password
*
* A session id is required in order to use any of the write methods.
*
* @param token Session token
* @param username User's username
* @param password User's password
* @return
* @throws MovieDbException
*/
public TokenAuthorisation getSessionTokenLogin(TokenAuthorisation token, String username, String password) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
if (!token.getSuccess()) {
throw new MovieDbException(ApiExceptionType.AUTH_FAILURE, "Authorisation token was not successful!");
}
parameters.add(Param.TOKEN, token.getRequestToken());
parameters.add(Param.USERNAME, username);
parameters.add(Param.PASSWORD, password);
URL url = new ApiUrl(apiKey, MethodBase.AUTH).subMethod(MethodSub.TOKEN_VALIDATE).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, TokenAuthorisation.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get Session Token", url, ex);
}
}
/**
* This method is used to generate a guest session id.
*
* A guest session can be used to rate movies without having a registered
* TMDb user account.
*
* You should only generate a single guest session per user (or device) as
* you will be able to attach the ratings to a TMDb user account in the
* future.
*
* There are also IP limits in place so you should always make sure it's the
* end user doing the guest session actions.
*
* If a guest session is not used for the first time within 24 hours, it
* will be automatically discarded.
*
* @return
* @throws MovieDbException
*/
public TokenSession getGuestSessionToken() throws MovieDbException {
URL url = new ApiUrl(apiKey, MethodBase.AUTH).subMethod(MethodSub.GUEST_SESSION).buildUrl();
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, TokenSession.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get Guest Session Token", url, ex);
}
}
}
@@ -0,0 +1,93 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.omertron.themoviedbapi.MovieDbException;
import com.omertron.themoviedbapi.results.ResultsMap;
import com.omertron.themoviedbapi.tools.HttpTools;
import java.util.List;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.omertron.themoviedbapi.model.Certification;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.MethodSub;
import java.io.IOException;
import java.net.URL;
import java.util.Map;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Class to hold the Certification Methods
*
* @author stuart.boston
*/
public class TmdbCertifications extends AbstractMethod {
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbCertifications(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* Get a list of movies certification.
*
* @return
* @throws MovieDbException
*/
public ResultsMap<String, List<Certification>> getMoviesCertification() throws MovieDbException {
URL url = new ApiUrl(apiKey, MethodBase.CERTIFICATION).subMethod(MethodSub.MOVIE_LIST).buildUrl();
String webpage = httpTools.getRequest(url);
try {
JsonNode node = MAPPER.readTree(webpage);
Map<String, List<Certification>> results = MAPPER.readValue(node.elements().next().traverse(), new TypeReference<Map<String, List<Certification>>>() {
});
return new ResultsMap<>(results);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get movie certifications", url, ex);
}
}
/**
* Get a list of tv certification.
*
* @return
* @throws MovieDbException
*/
public ResultsMap<String, List<Certification>> getTvCertification() throws MovieDbException {
URL url = new ApiUrl(apiKey, MethodBase.CERTIFICATION).subMethod(MethodSub.TV_LIST).buildUrl();
String webpage = httpTools.getRequest(url);
try {
JsonNode node = MAPPER.readTree(webpage);
Map<String, List<Certification>> results = MAPPER.readValue(node.elements().next().traverse(), new TypeReference<Map<String, List<Certification>>>() {
});
return new ResultsMap<>(results);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get TV certifications", url, ex);
}
}
}
@@ -0,0 +1,74 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.omertron.themoviedbapi.MovieDbException;
import com.omertron.themoviedbapi.model.change.ChangeListItem;
import com.omertron.themoviedbapi.results.ResultList;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.MethodSub;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.TmdbParameters;
import com.omertron.themoviedbapi.results.WrapperGenericList;
import java.net.URL;
/**
* Class to hold the Change Methods
*
* @author stuart.boston
*/
public class TmdbChanges extends AbstractMethod {
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbChanges(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* Get a list of Media IDs that have been edited.
*
* You can then use the movie/TV/person changes API to get the actual data that has been changed.
*
* @param method The method base to get
* @param page
* @param startDate the start date of the changes, optional
* @param endDate the end date of the changes, optional
* @return List of changed movie
* @throws MovieDbException
*/
public ResultList<ChangeListItem> getChangeList(MethodBase method, Integer page, String startDate, String endDate) throws MovieDbException {
TmdbParameters params = new TmdbParameters();
params.add(Param.PAGE, page);
params.add(Param.START_DATE, startDate);
params.add(Param.END_DATE, endDate);
URL url = new ApiUrl(apiKey, method).subMethod(MethodSub.CHANGES).buildUrl(params);
WrapperGenericList<ChangeListItem> wrapper = processWrapper(getTypeReference(ChangeListItem.class), url, "changes");
return wrapper.getResultsList();
}
}
@@ -0,0 +1,107 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.omertron.themoviedbapi.MovieDbException;
import com.omertron.themoviedbapi.model.artwork.Artwork;
import com.omertron.themoviedbapi.enumeration.ArtworkType;
import com.omertron.themoviedbapi.model.collection.CollectionInfo;
import com.omertron.themoviedbapi.results.ResultList;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.MethodSub;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.TmdbParameters;
import com.omertron.themoviedbapi.results.WrapperImages;
import java.io.IOException;
import java.net.URL;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Class to hold the Collections Methods
*
* @author stuart.boston
*/
public class TmdbCollections extends AbstractMethod {
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbCollections(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* This method is used to retrieve all of the basic information about a
* movie collection.
*
* You can get the ID needed for this method by making a getMovieInfo
* request for the belongs_to_collection.
*
* @param collectionId
* @param language
* @return
* @throws MovieDbException
*/
public CollectionInfo getCollectionInfo(int collectionId, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, collectionId);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.COLLECTION).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, CollectionInfo.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get collection information", url, ex);
}
}
/**
* Get all of the images for a particular collection by collection id.
*
* @param collectionId
* @param language
* @return
* @throws MovieDbException
*/
public ResultList<Artwork> getCollectionImages(int collectionId, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, collectionId);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.COLLECTION).subMethod(MethodSub.IMAGES).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
WrapperImages wrapper = MAPPER.readValue(webpage, WrapperImages.class);
ResultList<Artwork> results = new ResultList<>(wrapper.getAll(ArtworkType.POSTER, ArtworkType.BACKDROP));
wrapper.setResultProperties(results);
return results;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get collection images", url, ex);
}
}
}
@@ -0,0 +1,98 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.omertron.themoviedbapi.MovieDbException;
import com.omertron.themoviedbapi.model.company.Company;
import com.omertron.themoviedbapi.model.movie.MovieBasic;
import com.omertron.themoviedbapi.results.ResultList;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.MethodSub;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.TmdbParameters;
import com.omertron.themoviedbapi.results.WrapperGenericList;
import java.io.IOException;
import java.net.URL;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Class to hold the Company Methods
*
* @author stuart.boston
*/
public class TmdbCompanies extends AbstractMethod {
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbCompanies(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* This method is used to retrieve the basic information about a production company on TMDb.
*
* @param companyId
* @return
* @throws MovieDbException
*/
public Company getCompanyInfo(int companyId) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, companyId);
URL url = new ApiUrl(apiKey, MethodBase.COMPANY).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, Company.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get company information", url, ex);
}
}
/**
* This method is used to retrieve the movies associated with a company.
*
* These movies are returned in order of most recently released to oldest. The default response will return 20 movies per page.
*
* @param companyId
* @param language
* @param page
* @return
* @throws MovieDbException
*/
public ResultList<MovieBasic> getCompanyMovies(int companyId, String language, Integer page) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, companyId);
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.PAGE, page);
URL url = new ApiUrl(apiKey, MethodBase.COMPANY).subMethod(MethodSub.MOVIES).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
WrapperGenericList<MovieBasic> wrapper = processWrapper(getTypeReference(MovieBasic.class), url, webpage);
return wrapper.getResultsList();
}
}
@@ -0,0 +1,135 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.fasterxml.jackson.core.type.TypeReference;
import com.omertron.themoviedbapi.MovieDbException;
import static com.omertron.themoviedbapi.methods.AbstractMethod.MAPPER;
import com.omertron.themoviedbapi.model.config.Configuration;
import com.omertron.themoviedbapi.model.config.JobDepartment;
import com.omertron.themoviedbapi.results.ResultList;
import com.omertron.themoviedbapi.results.ResultsMap;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.MethodSub;
import com.omertron.themoviedbapi.results.WrapperConfig;
import com.omertron.themoviedbapi.results.WrapperJobList;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.Map;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Class to hold the Configuration Methods
*
* @author stuart.boston
*/
public class TmdbConfiguration extends AbstractMethod {
/**
* Cache the configuration in memory<br/>
* It rarely changes, so this should be safe.
*/
private static Configuration config = null;
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbConfiguration(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* Get the configuration<br/>
* If the configuration has been previously retrieved, use that instead
*
* @return
* @throws MovieDbException
*/
public Configuration getConfig() throws MovieDbException {
if (config == null) {
URL configUrl = new ApiUrl(apiKey, MethodBase.CONFIGURATION).buildUrl();
String webpage = httpTools.getRequest(configUrl);
try {
WrapperConfig wc = MAPPER.readValue(webpage, WrapperConfig.class);
config = wc.getTmdbConfiguration();
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to read configuration", configUrl, ex);
}
}
return config;
}
/**
* Get a list of valid jobs
*
* @return
* @throws MovieDbException
*/
public ResultList<JobDepartment> getJobs() throws MovieDbException {
URL url = new ApiUrl(apiKey, MethodBase.JOB).subMethod(MethodSub.LIST).buildUrl();
String webpage = httpTools.getRequest(url);
try {
WrapperJobList wrapper = MAPPER.readValue(webpage, WrapperJobList.class);
ResultList<JobDepartment> results = new ResultList<>(wrapper.getJobs());
wrapper.setResultProperties(results);
return results;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get job list", url, ex);
}
}
/**
* Get the list of supported timezones for the API methods that support them
*
* @return
* @throws MovieDbException
*/
public ResultsMap<String, List<String>> getTimezones() throws MovieDbException {
URL url = new ApiUrl(apiKey, MethodBase.TIMEZONES).subMethod(MethodSub.LIST).buildUrl();
String webpage = httpTools.getRequest(url);
List<Map<String, List<String>>> tzList;
try {
tzList = MAPPER.readValue(webpage, new TypeReference<List<Map<String, List<String>>>>() {
});
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get timezone list", url, ex);
}
ResultsMap<String, List<String>> timezones = new ResultsMap<>();
for (Map<String, List<String>> tzMap : tzList) {
for (Map.Entry<String, List<String>> x : tzMap.entrySet()) {
timezones.put(x.getKey(), x.getValue());
}
}
return timezones;
}
}
@@ -0,0 +1,84 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.omertron.themoviedbapi.MovieDbException;
import com.omertron.themoviedbapi.model.person.CreditInfo;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.TmdbParameters;
import java.io.IOException;
import java.net.URL;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Class to hold the Credit Methods
*
* @author stuart.boston
*/
public class TmdbCredits extends AbstractMethod {
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbCredits(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* Get the detailed information about a particular credit record.
* <p>
* This is currently only supported with the new credit model found in TV.
* <br/>
* These IDs can be found from any TV credit response as well as the
* TV_credits and combined_credits methods for people. <br/>
* The episodes object returns a list of episodes and are generally going to
* be guest stars. <br/>
* The season array will return a list of season numbers. <br/>
* Season credits are credits that were marked with the "add to every
* season" option in the editing interface and are assumed to be "season
* regulars".
*
* @param creditId
* @param language
* @return
* @throws MovieDbException
*/
public CreditInfo getCreditInfo(String creditId, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, creditId);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.CREDIT).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, CreditInfo.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get credit info", url, ex);
}
}
}
@@ -0,0 +1,78 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.omertron.themoviedbapi.MovieDbException;
import com.omertron.themoviedbapi.model.discover.Discover;
import com.omertron.themoviedbapi.model.movie.MovieBasic;
import com.omertron.themoviedbapi.model.tv.TVBasic;
import com.omertron.themoviedbapi.results.ResultList;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.MethodSub;
import com.omertron.themoviedbapi.results.WrapperGenericList;
import java.net.URL;
/**
* Class to hold the Discover Methods
*
* @author stuart.boston
*/
public class TmdbDiscover extends AbstractMethod {
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbDiscover(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* Discover movies by different types of data like average rating, number of votes, genres and certifications.
*
* @param discover A discover object containing the search criteria required
* @return
* @throws MovieDbException
*/
public ResultList<MovieBasic> getDiscoverMovies(Discover discover) throws MovieDbException {
URL url = new ApiUrl(apiKey, MethodBase.DISCOVER).subMethod(MethodSub.MOVIE).buildUrl(discover.getParams());
String webpage = httpTools.getRequest(url);
WrapperGenericList<MovieBasic> wrapper = processWrapper(getTypeReference(MovieBasic.class), url, webpage);
return wrapper.getResultsList();
}
/**
* Discover movies by different types of data like average rating, number of votes, genres and certifications.
*
* @param discover A discover object containing the search criteria required
* @return
* @throws MovieDbException
*/
public ResultList<TVBasic> getDiscoverTV(Discover discover) throws MovieDbException {
URL url = new ApiUrl(apiKey, MethodBase.DISCOVER).subMethod(MethodSub.TV).buildUrl(discover.getParams());
String webpage = httpTools.getRequest(url);
WrapperGenericList<TVBasic> wrapper = processWrapper(getTypeReference(TVBasic.class), url, webpage);
return wrapper.getResultsList();
}
}
@@ -0,0 +1,289 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.omertron.themoviedbapi.MovieDbException;
import static com.omertron.themoviedbapi.methods.AbstractMethod.MAPPER;
import com.omertron.themoviedbapi.model.StatusCode;
import com.omertron.themoviedbapi.model.artwork.Artwork;
import com.omertron.themoviedbapi.model.change.ChangeKeyItem;
import com.omertron.themoviedbapi.model.media.MediaCreditList;
import com.omertron.themoviedbapi.model.media.MediaState;
import com.omertron.themoviedbapi.model.media.Video;
import com.omertron.themoviedbapi.model.person.ExternalID;
import com.omertron.themoviedbapi.model.tv.TVEpisodeInfo;
import com.omertron.themoviedbapi.results.ResultList;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.MethodSub;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.PostBody;
import com.omertron.themoviedbapi.tools.PostTools;
import com.omertron.themoviedbapi.tools.TmdbParameters;
import com.omertron.themoviedbapi.results.WrapperImages;
import com.omertron.themoviedbapi.results.WrapperVideos;
import java.io.IOException;
import java.net.URL;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Class to hold the TV Methods
*
* @author stuart.boston
*/
public class TmdbEpisodes extends AbstractMethod {
private static final int RATING_MAX = 10;
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbEpisodes(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* Get the primary information about a TV episode by combination of a season
* and episode number.
*
* @param tvID
* @param seasonNumber
* @param episodeNumber
* @param language
* @param appendToResponse
* @return
* @throws MovieDbException
*/
public TVEpisodeInfo getEpisodeInfo(int tvID, int seasonNumber, int episodeNumber, String language, String... appendToResponse) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.SEASON_NUMBER, seasonNumber);
parameters.add(Param.EPISODE_NUMBER, episodeNumber);
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.APPEND, appendToResponse);
URL url = new ApiUrl(apiKey, MethodBase.EPISODE).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, TVEpisodeInfo.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get TV Episode Info", url, ex);
}
}
/**
* Look up a TV episode's changes by episode ID
*
* @param episodeID
* @param startDate
* @param endDate
* @return
* @throws MovieDbException
*/
public ResultList<ChangeKeyItem> getEpisodeChanges(int episodeID, String startDate, String endDate) throws MovieDbException {
return getMediaChanges(episodeID, startDate, endDate);
}
/**
* This method lets users get the status of whether or not the TV episode
* has been rated.
*
* A valid session id is required.
*
* @param tvID
* @param seasonNumber
* @param episodeNumber
* @param sessionID
* @return
* @throws MovieDbException
*/
public MediaState getEpisodeAccountState(int tvID, int seasonNumber, int episodeNumber, String sessionID) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.SESSION_ID, sessionID);
parameters.add(Param.SEASON_NUMBER, seasonNumber);
parameters.add(Param.EPISODE_NUMBER, episodeNumber);
URL url = new ApiUrl(apiKey, MethodBase.EPISODE).subMethod(MethodSub.ACCOUNT_STATES).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, MediaState.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get account state", url, ex);
}
}
/**
* Get the TV episode credits by combination of season and episode number.
*
* @param tvID
* @param seasonNumber
* @param episodeNumber
* @return
* @throws MovieDbException
*/
public MediaCreditList getEpisodeCredits(int tvID, int seasonNumber, int episodeNumber) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.SEASON_NUMBER, seasonNumber);
parameters.add(Param.EPISODE_NUMBER, episodeNumber);
URL url = new ApiUrl(apiKey, MethodBase.EPISODE).subMethod(MethodSub.CREDITS).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, MediaCreditList.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get credits", url, ex);
}
}
/**
* Get the external ids for a TV episode by comabination of a season and
* episode number.
*
* @param tvID
* @param seasonNumber
* @param episodeNumber
* @param language
* @return
* @throws MovieDbException
*/
public ExternalID getEpisodeExternalID(int tvID, int seasonNumber, int episodeNumber, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.SEASON_NUMBER, seasonNumber);
parameters.add(Param.EPISODE_NUMBER, episodeNumber);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.EPISODE).subMethod(MethodSub.EXTERNAL_IDS).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, ExternalID.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get external IDs", url, ex);
}
}
/**
* Get the images (episode stills) for a TV episode by combination of a
* season and episode number.
*
* @param tvID
* @param seasonNumber
* @param episodeNumber
* @return
* @throws MovieDbException
*/
public ResultList<Artwork> getEpisodeImages(int tvID, int seasonNumber, int episodeNumber) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.SEASON_NUMBER, seasonNumber);
parameters.add(Param.EPISODE_NUMBER, episodeNumber);
URL url = new ApiUrl(apiKey, MethodBase.EPISODE).subMethod(MethodSub.IMAGES).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
WrapperImages wrapper = MAPPER.readValue(webpage, WrapperImages.class);
ResultList<Artwork> results = new ResultList<>(wrapper.getAll());
wrapper.setResultProperties(results);
return results;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get images", url, ex);
}
}
/**
* This method lets users rate a TV episode. A valid session id or guest
* session id is required.
*
* @param tvID
* @param seasonNumber
* @param episodeNumber
* @param rating
* @param sessionID
* @param guestSessionID
* @return
* @throws MovieDbException
*/
public StatusCode postEpisodeRating(int tvID, int seasonNumber, int episodeNumber, int rating, String sessionID, String guestSessionID) throws MovieDbException {
if (rating < 0 || rating > RATING_MAX) {
throw new MovieDbException(ApiExceptionType.UNKNOWN_CAUSE, "Rating out of range");
}
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.SEASON_NUMBER, seasonNumber);
parameters.add(Param.EPISODE_NUMBER, episodeNumber);
parameters.add(Param.SESSION_ID, sessionID);
parameters.add(Param.GUEST_SESSION_ID, guestSessionID);
URL url = new ApiUrl(apiKey, MethodBase.EPISODE).subMethod(MethodSub.RATING).buildUrl(parameters);
String jsonBody = new PostTools()
.add(PostBody.VALUE, rating)
.build();
String webpage = httpTools.postRequest(url, jsonBody);
try {
return MAPPER.readValue(webpage, StatusCode.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to post rating", url, ex);
}
}
/**
* Get the videos that have been added to a TV episode (teasers, clips,
* etc...)
*
* @param tvID
* @param seasonNumber
* @param episodeNumber
* @param language
* @return
* @throws MovieDbException
*/
public ResultList<Video> getEpisodeVideos(int tvID, int seasonNumber, int episodeNumber, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.SEASON_NUMBER, seasonNumber);
parameters.add(Param.EPISODE_NUMBER, episodeNumber);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.EPISODE).subMethod(MethodSub.VIDEOS).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
WrapperVideos wrapper = MAPPER.readValue(webpage, WrapperVideos.class);
ResultList<Video> results = new ResultList<>(wrapper.getVideos());
wrapper.setResultProperties(results);
return results;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get videos", url, ex);
}
}
}
@@ -0,0 +1,87 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.omertron.themoviedbapi.MovieDbException;
import com.omertron.themoviedbapi.enumeration.ExternalSource;
import com.omertron.themoviedbapi.model.FindResults;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.TmdbParameters;
import java.io.IOException;
import java.net.URL;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Class to hold the Find Methods
*
* @author stuart.boston
*/
public class TmdbFind extends AbstractMethod {
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbFind(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* You con use this method to find movies, tv series or persons using external ids.
*
* Supported query ids are
* <ul>
* <li>Movies: imdb_id</li>
* <li>People: imdb_id, freebase_mid, freebase_id, tvrage_id</li>
* <li>TV Series: imdb_id, freebase_mid, freebase_id, tvdb_id, tvrage_id</li>
* <li>TV Seasons: freebase_mid, freebase_id, tvdb_id, tvrage_id</li>
* <li>TV Episodes: imdb_id, freebase_mid, freebase_id, tvdb_id, tvrage_idimdb_id, freebase_mid, freebase_id, tvrage_id,
* tvdb_id.
* </ul>
*
* For details see http://docs.themoviedb.apiary.io/#find
*
* @param id the external id
* @param externalSource one of {@link ExternalSource}.
* @param language the language
* @return
* @throws MovieDbException
*/
public FindResults find(String id, ExternalSource externalSource, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, id);
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.EXTERNAL_SOURCE, externalSource.getPropertyString());
URL url = new ApiUrl(apiKey, MethodBase.FIND).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, FindResults.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get find results", url, ex);
}
}
}
@@ -0,0 +1,129 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.omertron.themoviedbapi.MovieDbException;
import com.omertron.themoviedbapi.model.Genre;
import com.omertron.themoviedbapi.model.movie.MovieBasic;
import com.omertron.themoviedbapi.results.ResultList;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.MethodSub;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.TmdbParameters;
import com.omertron.themoviedbapi.results.WrapperGenericList;
import com.omertron.themoviedbapi.results.WrapperGenres;
import java.io.IOException;
import java.net.URL;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Class to hold the Genre Methods
*
* @author stuart.boston
*/
public class TmdbGenres extends AbstractMethod {
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbGenres(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* Get the list of movie genres.
*
* @param language
* @return
* @throws MovieDbException
*/
public ResultList<Genre> getGenreMovieList(String language) throws MovieDbException {
return getGenreList(language, MethodSub.MOVIE_LIST);
}
/**
* Get the list of TV genres.
*
* @param language
* @return
* @throws MovieDbException
*/
public ResultList<Genre> getGenreTVList(String language) throws MovieDbException {
return getGenreList(language, MethodSub.TV_LIST);
}
/**
* Get the list of genres for movies or TV
*
* @param language
* @param sub
* @return
* @throws MovieDbException
*/
private ResultList<Genre> getGenreList(String language, MethodSub sub) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.GENRE).subMethod(sub).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
WrapperGenres wrapper = MAPPER.readValue(webpage, WrapperGenres.class);
ResultList<Genre> results = new ResultList<>(wrapper.getGenres());
wrapper.setResultProperties(results);
return results;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get genre " + sub.toString(), url, ex);
}
}
/**
* Get the list of movies for a particular genre by id.
*
* By default, only movies with 10 or more votes are included.
*
* @param genreId
* @param language
* @param page
* @param includeAllMovies
* @param includeAdult
* @return
* @throws MovieDbException
*/
public ResultList<MovieBasic> getGenreMovies(int genreId, String language, Integer page, Boolean includeAllMovies, Boolean includeAdult) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, genreId);
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.PAGE, page);
parameters.add(Param.INCLUDE_ALL_MOVIES, includeAllMovies);
parameters.add(Param.INCLUDE_ADULT, includeAdult);
URL url = new ApiUrl(apiKey, MethodBase.GENRE).subMethod(MethodSub.MOVIES).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
WrapperGenericList<MovieBasic> wrapper = processWrapper(getTypeReference(MovieBasic.class), url, webpage);
return wrapper.getResultsList();
}
}
@@ -0,0 +1,96 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.omertron.themoviedbapi.MovieDbException;
import com.omertron.themoviedbapi.model.keyword.Keyword;
import com.omertron.themoviedbapi.model.movie.MovieBasic;
import com.omertron.themoviedbapi.results.ResultList;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.MethodSub;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.TmdbParameters;
import com.omertron.themoviedbapi.results.WrapperGenericList;
import java.io.IOException;
import java.net.URL;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Class to hold the Keyword Methods
*
* @author stuart.boston
*/
public class TmdbKeywords extends AbstractMethod {
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbKeywords(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* Get the basic information for a specific keyword id.
*
* @param keywordId
* @return
* @throws MovieDbException
*/
public Keyword getKeyword(String keywordId) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, keywordId);
URL url = new ApiUrl(apiKey, MethodBase.KEYWORD).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, Keyword.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get keyword " + keywordId, url, ex);
}
}
/**
* Get the list of movies for a particular keyword by id.
*
* @param keywordId
* @param language
* @param page
* @return List of movies with the keyword
* @throws MovieDbException
*/
public ResultList<MovieBasic> getKeywordMovies(String keywordId, String language, Integer page) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, keywordId);
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.PAGE, page);
URL url = new ApiUrl(apiKey, MethodBase.KEYWORD).subMethod(MethodSub.MOVIES).buildUrl(parameters);
WrapperGenericList<MovieBasic> wrapper = processWrapper(getTypeReference(MovieBasic.class), url, "keyword movies");
return wrapper.getResultsList();
}
}
@@ -0,0 +1,246 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.fasterxml.jackson.core.type.TypeReference;
import com.omertron.themoviedbapi.MovieDbException;
import com.omertron.themoviedbapi.model.list.ListStatusCode;
import com.omertron.themoviedbapi.model.StatusCode;
import com.omertron.themoviedbapi.model.list.ListItem;
import com.omertron.themoviedbapi.model.list.ListItemStatus;
import com.omertron.themoviedbapi.model.movie.MovieInfo;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.MethodSub;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.PostBody;
import com.omertron.themoviedbapi.tools.PostTools;
import com.omertron.themoviedbapi.tools.TmdbParameters;
import java.io.IOException;
import java.net.URL;
import org.apache.commons.lang3.StringUtils;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Class to hold the List Methods
*
* @author stuart.boston
*/
public class TmdbLists extends AbstractMethod {
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbLists(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* Get a list by its ID
*
* @param listId
* @return The list and its items
* @throws MovieDbException
*/
public ListItem<MovieInfo> getList(String listId) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, listId);
URL url = new ApiUrl(apiKey, MethodBase.LIST).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, new TypeReference<ListItem<MovieInfo>>() {
});
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get list", url, ex);
}
}
/**
* Check to see if an ID is already on a list.
*
* @param listId
* @param mediaId
* @return true if the movie is on the list
* @throws MovieDbException
*/
public boolean checkItemStatus(String listId, int mediaId) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, listId);
parameters.add(Param.MOVIE_ID, mediaId);
URL url = new ApiUrl(apiKey, MethodBase.LIST).subMethod(MethodSub.ITEM_STATUS).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, ListItemStatus.class).isItemPresent();
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get item status", url, ex);
}
}
/**
* This method lets users create a new list. A valid session id is required.
*
* @param sessionId
* @param name
* @param description
* @return The list id
* @throws MovieDbException
*/
public String createList(String sessionId, String name, String description) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.SESSION_ID, sessionId);
String jsonBody = new PostTools()
.add(PostBody.NAME, StringUtils.trimToEmpty(name))
.add(PostBody.DESCRIPTION, StringUtils.trimToEmpty(description))
.build();
URL url = new ApiUrl(apiKey, MethodBase.LIST).buildUrl(parameters);
String webpage = httpTools.postRequest(url, jsonBody);
try {
return MAPPER.readValue(webpage, ListStatusCode.class).getListId();
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to create list", url, ex);
}
}
/**
* This method lets users delete a list that they created. A valid session id is required.
*
* @param sessionId
* @param listId
* @return
* @throws MovieDbException
*/
public StatusCode deleteList(String sessionId, String listId) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, listId);
parameters.add(Param.SESSION_ID, sessionId);
URL url = new ApiUrl(apiKey, MethodBase.LIST).buildUrl(parameters);
String webpage = httpTools.deleteRequest(url);
try {
return MAPPER.readValue(webpage, StatusCode.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to delete list", url, ex);
}
}
/**
* Modify a list
*
* This can be used to add or remove an item from the list
*
* @param sessionId
* @param listId
* @param movieId
* @param operation
* @return
* @throws MovieDbException
*/
private StatusCode modifyMovieList(String sessionId, String listId, int movieId, MethodSub operation) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.SESSION_ID, sessionId);
parameters.add(Param.ID, listId);
String jsonBody = new PostTools()
.add(PostBody.MEDIA_ID, movieId)
.build();
URL url = new ApiUrl(apiKey, MethodBase.LIST).subMethod(operation).buildUrl(parameters);
String webpage = httpTools.postRequest(url, jsonBody);
try {
return MAPPER.readValue(webpage, StatusCode.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to remove item from list", url, ex);
}
}
/**
* This method lets users add new items to a list that they created.
*
* A valid session id is required.
*
* @param sessionId
* @param listId
* @param mediaId
* @return
* @throws MovieDbException
*/
public StatusCode addItem(String sessionId, String listId, int mediaId) throws MovieDbException {
return modifyMovieList(sessionId, listId, mediaId, MethodSub.ADD_ITEM);
}
/**
* This method lets users delete items from a list that they created.
*
* A valid session id is required.
*
* @param sessionId
* @param listId
* @param mediaId
* @return
* @throws MovieDbException
*/
public StatusCode removeItem(String sessionId, String listId, int mediaId) throws MovieDbException {
return modifyMovieList(sessionId, listId, mediaId, MethodSub.REMOVE_ITEM);
}
/**
* Clear all of the items within a list.
*
* This is a irreversible action and should be treated with caution.
*
* A valid session id is required. A call without confirm=true will return status code 29.
*
* @param sessionId
* @param listId
* @param confirm
* @return
* @throws MovieDbException
*/
public StatusCode clear(String sessionId, String listId, boolean confirm) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.SESSION_ID, sessionId);
parameters.add(Param.ID, listId);
parameters.add(Param.CONFIRM, confirm);
URL url = new ApiUrl(apiKey, MethodBase.LIST).subMethod(MethodSub.CLEAR).buildUrl(parameters);
String webpage = httpTools.postRequest(url, "");
try {
return MAPPER.readValue(webpage, StatusCode.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to clear list", url, ex);
}
}
}
@@ -0,0 +1,599 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.omertron.themoviedbapi.MovieDbException;
import static com.omertron.themoviedbapi.methods.AbstractMethod.MAPPER;
import com.omertron.themoviedbapi.model.StatusCode;
import com.omertron.themoviedbapi.model.artwork.Artwork;
import com.omertron.themoviedbapi.model.change.ChangeKeyItem;
import com.omertron.themoviedbapi.model.keyword.Keyword;
import com.omertron.themoviedbapi.model.list.UserList;
import com.omertron.themoviedbapi.model.media.AlternativeTitle;
import com.omertron.themoviedbapi.model.media.MediaCreditList;
import com.omertron.themoviedbapi.model.media.MediaState;
import com.omertron.themoviedbapi.model.media.Translation;
import com.omertron.themoviedbapi.model.media.Video;
import com.omertron.themoviedbapi.model.movie.MovieInfo;
import com.omertron.themoviedbapi.model.movie.ReleaseDates;
import com.omertron.themoviedbapi.model.movie.ReleaseInfo;
import com.omertron.themoviedbapi.model.review.Review;
import com.omertron.themoviedbapi.results.ResultList;
import com.omertron.themoviedbapi.results.WrapperAlternativeTitles;
import com.omertron.themoviedbapi.results.WrapperGenericList;
import com.omertron.themoviedbapi.results.WrapperImages;
import com.omertron.themoviedbapi.results.WrapperMovieKeywords;
import com.omertron.themoviedbapi.results.WrapperReleaseInfo;
import com.omertron.themoviedbapi.results.WrapperTranslations;
import com.omertron.themoviedbapi.results.WrapperVideos;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.MethodSub;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.PostBody;
import com.omertron.themoviedbapi.tools.PostTools;
import com.omertron.themoviedbapi.tools.TmdbParameters;
import java.io.IOException;
import java.net.URL;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Class to hold the Movie Methods
*
* @author stuart.boston
*/
public class TmdbMovies extends AbstractMethod {
private static final int RATING_MAX = 10;
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbMovies(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* This method is used to retrieve all of the basic movie information.
*
* It will return the single highest rated poster and backdrop.
*
* ApiExceptionType.MOVIE_ID_NOT_FOUND will be thrown if there are no movies found.
*
* @param movieId
* @param language
* @param appendToResponse
* @return
* @throws MovieDbException
*/
public MovieInfo getMovieInfo(int movieId, String language, String... appendToResponse) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, movieId);
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.APPEND, appendToResponse);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
MovieInfo movie = MAPPER.readValue(webpage, MovieInfo.class);
if (movie == null || movie.getId() == 0) {
throw new MovieDbException(ApiExceptionType.ID_NOT_FOUND, "No movie found for ID: " + movieId, url);
}
return movie;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get info", url, ex);
}
}
/**
* This method is used to retrieve all of the basic movie information.
*
* It will return the single highest rated poster and backdrop.
*
* ApiExceptionType.MOVIE_ID_NOT_FOUND will be thrown if there are no movies found.
*
* @param imdbId
* @param language
* @param appendToResponse
* @return
* @throws MovieDbException
*/
public MovieInfo getMovieInfoImdb(String imdbId, String language, String... appendToResponse) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, imdbId);
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.APPEND, appendToResponse);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
MovieInfo movie = MAPPER.readValue(webpage, MovieInfo.class);
if (movie == null || movie.getId() == 0) {
throw new MovieDbException(ApiExceptionType.ID_NOT_FOUND, "No movie found for IMDB ID: " + imdbId, url);
}
return movie;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get info (IMDB)", url, ex);
}
}
/**
* This method lets a user get the status of whether or not the movie has been rated or added to their favourite or movie watch
* list.
*
* A valid session id is required.
*
* @param movieId
* @param sessionId
* @return
* @throws MovieDbException
*/
public MediaState getMovieAccountState(int movieId, String sessionId) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, movieId);
parameters.add(Param.SESSION_ID, sessionId);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).subMethod(MethodSub.ACCOUNT_STATES).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, MediaState.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get account state", url, ex);
}
}
/**
* This method is used to retrieve all of the alternative titles we have for a particular movie.
*
* @param movieId
* @param country
* @return
* @throws MovieDbException
*/
public ResultList<AlternativeTitle> getMovieAlternativeTitles(int movieId, String country) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, movieId);
parameters.add(Param.COUNTRY, country);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).subMethod(MethodSub.ALT_TITLES).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
WrapperAlternativeTitles wrapper = MAPPER.readValue(webpage, WrapperAlternativeTitles.class);
ResultList<AlternativeTitle> results = new ResultList<>(wrapper.getTitles());
wrapper.setResultProperties(results);
return results;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get alternative titles", url, ex);
}
}
/**
* Get the cast and crew information for a specific movie id.
*
* @param movieId
* @return
* @throws MovieDbException
*/
public MediaCreditList getMovieCredits(int movieId) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, movieId);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).subMethod(MethodSub.CREDITS).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, MediaCreditList.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get credits", url, ex);
}
}
/**
* This method should be used when youre wanting to retrieve all of the images for a particular movie.
*
* @param movieId
* @param language
* @return
* @throws MovieDbException
*/
public ResultList<Artwork> getMovieImages(int movieId, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, movieId);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).subMethod(MethodSub.IMAGES).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
WrapperImages wrapper = MAPPER.readValue(webpage, WrapperImages.class);
ResultList<Artwork> results = new ResultList<>(wrapper.getAll());
wrapper.setResultProperties(results);
return results;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get images", url, ex);
}
}
/**
* This method is used to retrieve all of the keywords that have been added to a particular movie.
*
* Currently, only English keywords exist.
*
* @param movieId
* @return
* @throws MovieDbException
*/
public ResultList<Keyword> getMovieKeywords(int movieId) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, movieId);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).subMethod(MethodSub.KEYWORDS).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
WrapperMovieKeywords wrapper = MAPPER.readValue(webpage, WrapperMovieKeywords.class);
ResultList<Keyword> results = new ResultList<>(wrapper.getKeywords());
wrapper.setResultProperties(results);
return results;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get keywords", url, ex);
}
}
/**
* The recommendations method will let you retrieve the movie recommendations for a particular movie.
*
* @param movieId
* @param language
* @return
* @throws MovieDbException
*/
public ResultList<MovieInfo> getRecommendations(int movieId, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, movieId);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).subMethod(MethodSub.RECOMMENDATIONS).buildUrl(parameters);
WrapperGenericList<MovieInfo> wrapper = processWrapper(getTypeReference(MovieInfo.class), url, "recommendations");
return wrapper.getResultsList();
}
/**
* This method is used to retrieve all of the release and certification data we have for a specific movie.
*
* @param movieId
* @param language
* @return
* @throws MovieDbException
*/
public ResultList<ReleaseInfo> getMovieReleaseInfo(int movieId, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, movieId);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).subMethod(MethodSub.RELEASES).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
WrapperReleaseInfo wrapper = MAPPER.readValue(webpage, WrapperReleaseInfo.class);
ResultList<ReleaseInfo> results = new ResultList<>(wrapper.getCountries());
wrapper.setResultProperties(results);
return results;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get release information", url, ex);
}
}
/**
* This method is used to retrieve all of the trailers for a particular movie.
*
* Supported sites are YouTube and QuickTime.
*
* @param movieId
* @param language
* @return
* @throws MovieDbException
*/
public ResultList<Video> getMovieVideos(int movieId, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, movieId);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).subMethod(MethodSub.VIDEOS).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
WrapperVideos wrapper = MAPPER.readValue(webpage, WrapperVideos.class);
ResultList<Video> results = new ResultList<>(wrapper.getVideos());
wrapper.setResultProperties(results);
return results;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get videos", url, ex);
}
}
/**
* Get the release dates, certifications and related information by country for a specific movie id.
*
* The results are keyed by country code and contain a type value.
*
* @param movieId
* @return
* @throws MovieDbException
*/
public ResultList<ReleaseDates> getReleaseDates(int movieId) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, movieId);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).subMethod(MethodSub.RELEASE_DATES).buildUrl(parameters);
WrapperGenericList<ReleaseDates> wrapper = processWrapper(getTypeReference(ReleaseDates.class), url, "release dates");
return wrapper.getResultsList();
}
/**
* This method is used to retrieve a list of the available translations for a specific movie.
*
* @param movieId
* @return
* @throws MovieDbException
*/
public ResultList<Translation> getMovieTranslations(int movieId) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, movieId);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).subMethod(MethodSub.TRANSLATIONS).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
WrapperTranslations wrapper = MAPPER.readValue(webpage, WrapperTranslations.class);
ResultList<Translation> results = new ResultList<>(wrapper.getTranslations());
wrapper.setResultProperties(results);
return results;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get translations", url, ex);
}
}
/**
* The similar movies method will let you retrieve the similar movies for a particular movie.
*
* This data is created dynamically but with the help of users votes on TMDb.
*
* The data is much better with movies that have more keywords
*
* @param movieId
* @param language
* @param page
* @return
* @throws MovieDbException
*/
public ResultList<MovieInfo> getSimilarMovies(int movieId, Integer page, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, movieId);
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.PAGE, page);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).subMethod(MethodSub.SIMILAR).buildUrl(parameters);
WrapperGenericList<MovieInfo> wrapper = processWrapper(getTypeReference(MovieInfo.class), url, "similar movies");
return wrapper.getResultsList();
}
/**
* Get the reviews for a particular movie id.
*
* @param movieId
* @param page
* @param language
* @return
* @throws MovieDbException
*/
public ResultList<Review> getMovieReviews(int movieId, Integer page, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, movieId);
parameters.add(Param.PAGE, page);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).subMethod(MethodSub.REVIEWS).buildUrl(parameters);
WrapperGenericList<Review> wrapper = processWrapper(getTypeReference(Review.class), url, "review");
return wrapper.getResultsList();
}
/**
* Get the lists that the movie belongs to
*
* @param movieId
* @param language
* @param page
* @return
* @throws MovieDbException
*/
public ResultList<UserList> getMovieLists(int movieId, Integer page, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, movieId);
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.PAGE, page);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).subMethod(MethodSub.LISTS).buildUrl(parameters);
WrapperGenericList<UserList> wrapper = processWrapper(getTypeReference(UserList.class), url, "movie lists");
return wrapper.getResultsList();
}
/**
* Get the changes for a specific movie ID.
*
* Changes are grouped by key, and ordered by date in descending order.
*
* By default, only the last 24 hours of changes are returned.
*
* The maximum number of days that can be returned in a single request is 14.
*
* The language is present on fields that are translatable.
*
* @param movieId
* @param startDate
* @param endDate
* @return
* @throws MovieDbException
*/
public ResultList<ChangeKeyItem> getMovieChanges(int movieId, String startDate, String endDate) throws MovieDbException {
return getMediaChanges(movieId, startDate, endDate);
}
/**
* This method lets users rate a movie.
*
* A valid session id or guest session id is required.
*
* @param sessionId
* @param movieId
* @param rating
* @param guestSessionId
* @return
* @throws MovieDbException
*/
public StatusCode postMovieRating(int movieId, int rating, String sessionId, String guestSessionId) throws MovieDbException {
if (rating < 0 || rating > RATING_MAX) {
throw new MovieDbException(ApiExceptionType.UNKNOWN_CAUSE, "Rating out of range");
}
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, movieId);
parameters.add(Param.SESSION_ID, sessionId);
parameters.add(Param.GUEST_SESSION_ID, guestSessionId);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).subMethod(MethodSub.RATING).buildUrl(parameters);
String jsonBody = new PostTools()
.add(PostBody.VALUE, rating)
.build();
String webpage = httpTools.postRequest(url, jsonBody);
try {
return MAPPER.readValue(webpage, StatusCode.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to post rating", url, ex);
}
}
/**
* This method is used to retrieve the newest movie that was added to TMDb.
*
* @return
* @throws MovieDbException
*/
public MovieInfo getLatestMovie() throws MovieDbException {
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).subMethod(MethodSub.LATEST).buildUrl();
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, MovieInfo.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get latest movie", url, ex);
}
}
/**
* Get the list of upcoming movies.
*
* This list refreshes every day.
*
* The maximum number of items this list will include is 100.
*
* @param language
* @param page
* @return
* @throws MovieDbException
*/
public ResultList<MovieInfo> getUpcoming(Integer page, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.PAGE, page);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).subMethod(MethodSub.UPCOMING).buildUrl(parameters);
WrapperGenericList<MovieInfo> wrapper = processWrapper(getTypeReference(MovieInfo.class), url, "upcoming movies");
return wrapper.getResultsList();
}
/**
* This method is used to retrieve the movies currently in theatres.
*
* This is a curated list that will normally contain 100 movies. The default response will return 20 movies.
*
* @param language
* @param page
* @return
* @throws MovieDbException
*/
public ResultList<MovieInfo> getNowPlayingMovies(Integer page, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.PAGE, page);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).subMethod(MethodSub.NOW_PLAYING).buildUrl(parameters);
WrapperGenericList<MovieInfo> wrapper = processWrapper(getTypeReference(MovieInfo.class), url, "now playing movies");
return wrapper.getResultsList();
}
/**
* This method is used to retrieve the daily movie popularity list.
*
* This list is updated daily. The default response will return 20 movies.
*
* @param language
* @param page
* @return
* @throws MovieDbException
*/
public ResultList<MovieInfo> getPopularMovieList(Integer page, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.PAGE, page);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).subMethod(MethodSub.POPULAR).buildUrl(parameters);
WrapperGenericList<MovieInfo> wrapper = processWrapper(getTypeReference(MovieInfo.class), url, "popular movie list");
return wrapper.getResultsList();
}
/**
* This method is used to retrieve the top rated movies that have over 10 votes on TMDb.
*
* The default response will return 20 movies.
*
* @param language
* @param page
* @return
* @throws MovieDbException
*/
public ResultList<MovieInfo> getTopRatedMovies(Integer page, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.PAGE, page);
URL url = new ApiUrl(apiKey, MethodBase.MOVIE).subMethod(MethodSub.TOP_RATED).buildUrl(parameters);
WrapperGenericList<MovieInfo> wrapper = processWrapper(getTypeReference(MovieInfo.class), url, "top rated movies");
return wrapper.getResultsList();
}
}
@@ -0,0 +1,73 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.omertron.themoviedbapi.MovieDbException;
import com.omertron.themoviedbapi.model.network.Network;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.TmdbParameters;
import java.io.IOException;
import java.net.URL;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Class to hold the Network Methods
*
* @author stuart.boston
*/
public class TmdbNetworks extends AbstractMethod {
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbNetworks(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* This method is used to retrieve the basic information about a TV network.
* <p>
* You can use this ID to search for TV shows with the discover method.
*
* @param networkId
* @return
* @throws MovieDbException
*/
public Network getNetworkInfo(int networkId) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, networkId);
URL url = new ApiUrl(apiKey, MethodBase.NETWORK).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, Network.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get network information", url, ex);
}
}
}
@@ -0,0 +1,312 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.omertron.themoviedbapi.MovieDbException;
import com.omertron.themoviedbapi.enumeration.ArtworkType;
import static com.omertron.themoviedbapi.methods.AbstractMethod.MAPPER;
import com.omertron.themoviedbapi.model.artwork.Artwork;
import com.omertron.themoviedbapi.model.artwork.ArtworkMedia;
import com.omertron.themoviedbapi.model.change.ChangeKeyItem;
import com.omertron.themoviedbapi.model.credits.CreditBasic;
import com.omertron.themoviedbapi.model.credits.CreditMovieBasic;
import com.omertron.themoviedbapi.model.credits.CreditTVBasic;
import com.omertron.themoviedbapi.model.person.ExternalID;
import com.omertron.themoviedbapi.model.person.PersonCreditList;
import com.omertron.themoviedbapi.model.person.PersonCreditsMixIn;
import com.omertron.themoviedbapi.model.person.PersonFind;
import com.omertron.themoviedbapi.model.person.PersonInfo;
import com.omertron.themoviedbapi.results.ResultList;
import com.omertron.themoviedbapi.results.WrapperGenericList;
import com.omertron.themoviedbapi.results.WrapperImages;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.MethodSub;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.TmdbParameters;
import java.io.IOException;
import java.net.URL;
import org.apache.commons.lang3.StringUtils;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Class to hold the People Methods
*
* @author stuart.boston
*/
public class TmdbPeople extends AbstractMethod {
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbPeople(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* Get the general person information for a specific id.
*
* @param personId
* @param appendToResponse
* @return
* @throws MovieDbException
*/
public PersonInfo getPersonInfo(int personId, String... appendToResponse) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, personId);
parameters.add(Param.APPEND, appendToResponse);
// Switch combined credits for tv & movie.
String atr = (String) parameters.get(Param.APPEND);
if (StringUtils.isNotBlank(atr) && atr.contains("combined_credits")) {
atr = atr.replace("combined_credits", "tv_credits,movie_credits");
parameters.add(Param.APPEND, atr);
}
URL url = new ApiUrl(apiKey, MethodBase.PERSON).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, PersonInfo.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get person info", url, ex);
}
}
/**
* Get the movie credits for a specific person id.
*
* @param personId
* @param language
* @return
* @throws MovieDbException
*/
public PersonCreditList<CreditMovieBasic> getPersonMovieCredits(int personId, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, personId);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.PERSON).subMethod(MethodSub.MOVIE_CREDITS).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
TypeReference<PersonCreditList<CreditMovieBasic>> tr = new TypeReference<PersonCreditList<CreditMovieBasic>>() {
};
return MAPPER.readValue(webpage, tr);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get person movie credits", url, ex);
}
}
/**
* Get the TV credits for a specific person id.
*
* To get the expanded details for each record, call the /credit method with
* the provided credit_id.
*
* This will provide details about which episode and/or season the credit is
* for.
*
* @param personId
* @param language
* @return
* @throws MovieDbException
*/
public PersonCreditList<CreditTVBasic> getPersonTVCredits(int personId, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, personId);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.PERSON).subMethod(MethodSub.TV_CREDITS).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
TypeReference<PersonCreditList<CreditTVBasic>> tr = new TypeReference<PersonCreditList<CreditTVBasic>>() {
};
return MAPPER.readValue(webpage, tr);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get person TV credits", url, ex);
}
}
/**
* Get the combined (movie and TV) credits for a specific person id.
*
* To get the expanded details for each TV record, call the /credit method
* with the provided credit_id.
*
* This will provide details about which episode and/or season the credit is
* for.
*
* @param personId
* @param language
* @return
* @throws MovieDbException
*/
public PersonCreditList<CreditBasic> getPersonCombinedCredits(int personId, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, personId);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.PERSON).subMethod(MethodSub.COMBINED_CREDITS).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
ObjectMapper mapper = new ObjectMapper();
mapper.addMixIn(PersonCreditList.class, PersonCreditsMixIn.class);
TypeReference<PersonCreditList<CreditBasic>> tr = new TypeReference<PersonCreditList<CreditBasic>>() {
};
return mapper.readValue(webpage, tr);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get person combined credits", url, ex);
}
}
/**
* Get the external ids for a specific person id.
*
* @param personId
* @return
* @throws MovieDbException
*/
public ExternalID getPersonExternalIds(int personId) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, personId);
URL url = new ApiUrl(apiKey, MethodBase.PERSON).subMethod(MethodSub.EXTERNAL_IDS).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, ExternalID.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get person external IDs", url, ex);
}
}
/**
* Get the images for a specific person id.
*
* @param personId
* @return
* @throws MovieDbException
*/
public ResultList<Artwork> getPersonImages(int personId) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, personId);
URL url = new ApiUrl(apiKey, MethodBase.PERSON).subMethod(MethodSub.IMAGES).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
WrapperImages wrapper = MAPPER.readValue(webpage, WrapperImages.class);
ResultList<Artwork> results = new ResultList<>(wrapper.getAll(ArtworkType.PROFILE));
wrapper.setResultProperties(results);
return results;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get person images", url, ex);
}
}
/**
* Get the images that have been tagged with a specific person id.
*
* We return all of the image results with a media object mapped for each
* image.
*
* @param personId
* @param page
* @param language
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public ResultList<ArtworkMedia> getPersonTaggedImages(int personId, Integer page, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, personId);
parameters.add(Param.PAGE, page);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.PERSON).subMethod(MethodSub.TAGGED_IMAGES).buildUrl(parameters);
WrapperGenericList<ArtworkMedia> wrapper = processWrapper(getTypeReference(ArtworkMedia.class), url, "tagged images");
return wrapper.getResultsList();
}
/**
* Get the changes for a specific person id.
*
* Changes are grouped by key, and ordered by date in descending order.
*
* By default, only the last 24 hours of changes are returned.
*
* The maximum number of days that can be returned in a single request is
* 14.
*
* The language is present on fields that are translatable.
*
* @param personId
* @param startDate
* @param endDate
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public ResultList<ChangeKeyItem> getPersonChanges(int personId, String startDate, String endDate) throws MovieDbException {
return getMediaChanges(personId, startDate, endDate);
}
/**
* Get the list of popular people on The Movie Database.
*
* This list refreshes every day.
*
* @param page
* @return
* @throws MovieDbException
*/
public ResultList<PersonFind> getPersonPopular(Integer page) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.PAGE, page);
URL url = new ApiUrl(apiKey, MethodBase.PERSON).subMethod(MethodSub.POPULAR).buildUrl(parameters);
WrapperGenericList<PersonFind> wrapper = processWrapper(getTypeReference(PersonFind.class), url, "person popular");
return wrapper.getResultsList();
}
/**
* Get the latest person id.
*
* @return
* @throws MovieDbException
*/
public PersonInfo getPersonLatest() throws MovieDbException {
URL url = new ApiUrl(apiKey, MethodBase.PERSON).subMethod(MethodSub.LATEST).buildUrl();
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, PersonInfo.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get latest person", url, ex);
}
}
}
@@ -0,0 +1,72 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.omertron.themoviedbapi.MovieDbException;
import static com.omertron.themoviedbapi.methods.AbstractMethod.MAPPER;
import com.omertron.themoviedbapi.model.review.Review;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.TmdbParameters;
import java.io.IOException;
import java.net.URL;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Class to hold the Review Methods
*
* @author stuart.boston
*/
public class TmdbReviews extends AbstractMethod {
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbReviews(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* Get the full details of a review by ID.
*
* @param reviewId
* @return
* @throws MovieDbException
*/
public Review getReview(String reviewId) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, reviewId);
URL url = new ApiUrl(apiKey, MethodBase.REVIEW).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, Review.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get review", url, ex);
}
}
}
@@ -0,0 +1,244 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.omertron.themoviedbapi.MovieDbException;
import com.omertron.themoviedbapi.enumeration.SearchType;
import static com.omertron.themoviedbapi.methods.AbstractMethod.MAPPER;
import com.omertron.themoviedbapi.model.collection.Collection;
import com.omertron.themoviedbapi.model.company.Company;
import com.omertron.themoviedbapi.model.keyword.Keyword;
import com.omertron.themoviedbapi.model.media.MediaBasic;
import com.omertron.themoviedbapi.model.movie.MovieInfo;
import com.omertron.themoviedbapi.model.person.PersonFind;
import com.omertron.themoviedbapi.model.tv.TVBasic;
import com.omertron.themoviedbapi.results.ResultList;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.MethodSub;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.TmdbParameters;
import com.omertron.themoviedbapi.results.WrapperGenericList;
import com.omertron.themoviedbapi.results.WrapperMultiSearch;
import java.io.IOException;
import java.net.URL;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Class to hold the Search Methods
*
* @author stuart.boston
*/
public class TmdbSearch extends AbstractMethod {
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbSearch(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* Search Companies.
*
* You can use this method to search for production companies that are part of TMDb. The company IDs will map to those returned
* on movie calls.
*
* http://help.themoviedb.org/kb/api/search-companies
*
* @param query
* @param page
* @return
* @throws MovieDbException
*/
public ResultList<Company> searchCompanies(String query, Integer page) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.QUERY, query);
parameters.add(Param.PAGE, page);
URL url = new ApiUrl(apiKey, MethodBase.SEARCH).subMethod(MethodSub.COMPANY).buildUrl(parameters);
WrapperGenericList<Company> wrapper = processWrapper(getTypeReference(Company.class), url, "company");
return wrapper.getResultsList();
}
/**
* Search for collections by name.
*
* @param query
* @param language
* @param page
* @return
* @throws MovieDbException
*/
public ResultList<Collection> searchCollection(String query, Integer page, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.QUERY, query);
parameters.add(Param.PAGE, page);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.SEARCH).subMethod(MethodSub.COLLECTION).buildUrl(parameters);
WrapperGenericList<Collection> wrapper = processWrapper(getTypeReference(Collection.class), url, "collection");
return wrapper.getResultsList();
}
/**
* Search for keywords by name
*
* @param query
* @param page
* @return
* @throws MovieDbException
*/
public ResultList<Keyword> searchKeyword(String query, Integer page) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.QUERY, query);
parameters.add(Param.PAGE, page);
URL url = new ApiUrl(apiKey, MethodBase.SEARCH).subMethod(MethodSub.KEYWORD).buildUrl(parameters);
WrapperGenericList<Keyword> wrapper = processWrapper(getTypeReference(Keyword.class), url, "keyword");
return wrapper.getResultsList();
}
/**
* Search Movies This is a good starting point to start finding movies on TMDb.
*
* @param query
* @param searchYear Limit the search to the provided year. Zero (0) will get all years
* @param language The language to include. Can be blank/null.
* @param includeAdult true or false to include adult titles in the search
* @param page The page of results to return. 0 to get the default (first page)
* @param primaryReleaseYear
* @param searchType
* @return
* @throws MovieDbException
*/
public ResultList<MovieInfo> searchMovie(String query,
Integer page,
String language,
Boolean includeAdult,
Integer searchYear,
Integer primaryReleaseYear,
SearchType searchType) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.QUERY, query);
parameters.add(Param.PAGE, page);
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.ADULT, includeAdult);
parameters.add(Param.YEAR, searchYear);
parameters.add(Param.PRIMARY_RELEASE_YEAR, primaryReleaseYear);
if (searchType != null) {
parameters.add(Param.SEARCH_TYPE, searchType.getPropertyString());
}
URL url = new ApiUrl(apiKey, MethodBase.SEARCH).subMethod(MethodSub.MOVIE).buildUrl(parameters);
WrapperGenericList<MovieInfo> wrapper = processWrapper(getTypeReference(MovieInfo.class), url, "movie");
return wrapper.getResultsList();
}
/**
* Search the movie, tv show and person collections with a single query.
*
* Each item returned in the result array has a media_type field that maps to either movie, tv or person.
*
* Each mapped result is the same response you would get from each independent search
*
* @param query
* @param page
* @param language
* @param includeAdult
* @return
* @throws MovieDbException
*/
public ResultList<MediaBasic> searchMulti(String query, Integer page, String language, Boolean includeAdult) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.QUERY, query);
parameters.add(Param.PAGE, page);
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.ADULT, includeAdult);
URL url = new ApiUrl(apiKey, MethodBase.SEARCH).subMethod(MethodSub.MULTI).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
WrapperMultiSearch wrapper = MAPPER.readValue(webpage, WrapperMultiSearch.class);
ResultList<MediaBasic> results = new ResultList<>();
results.getResults().addAll(wrapper.getResults());
wrapper.setResultProperties(results);
return results;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get multi search", url, ex);
}
}
/**
* This is a good starting point to start finding people on TMDb.
*
* The idea is to be a quick and light method so you can iterate through people quickly.
*
* @param query
* @param includeAdult
* @param page
* @param searchType
* @return
* @throws MovieDbException
*/
public ResultList<PersonFind> searchPeople(String query, Integer page, Boolean includeAdult, SearchType searchType) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.QUERY, query);
parameters.add(Param.ADULT, includeAdult);
parameters.add(Param.PAGE, page);
if (searchType != null) {
parameters.add(Param.SEARCH_TYPE, searchType.getPropertyString());
}
URL url = new ApiUrl(apiKey, MethodBase.SEARCH).subMethod(MethodSub.PERSON).buildUrl(parameters);
WrapperGenericList<PersonFind> wrapper = processWrapper(getTypeReference(PersonFind.class), url, "person");
return wrapper.getResultsList();
}
/**
* Search for TV shows by title.
*
* @param query
* @param page
* @param language
* @param firstAirDateYear
* @param searchType
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public ResultList<TVBasic> searchTV(String query, Integer page, String language, Integer firstAirDateYear, SearchType searchType) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.QUERY, query);
parameters.add(Param.PAGE, page);
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.FIRST_AIR_DATE_YEAR, firstAirDateYear);
if (searchType != null) {
parameters.add(Param.SEARCH_TYPE, searchType.getPropertyString());
}
URL url = new ApiUrl(apiKey, MethodBase.SEARCH).subMethod(MethodSub.TV).buildUrl(parameters);
WrapperGenericList<TVBasic> wrapper = processWrapper(getTypeReference(TVBasic.class), url, "TV Show");
return wrapper.getResultsList();
}
}
@@ -0,0 +1,230 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.omertron.themoviedbapi.MovieDbException;
import static com.omertron.themoviedbapi.methods.AbstractMethod.MAPPER;
import com.omertron.themoviedbapi.model.artwork.Artwork;
import com.omertron.themoviedbapi.model.change.ChangeKeyItem;
import com.omertron.themoviedbapi.model.media.MediaCreditList;
import com.omertron.themoviedbapi.model.media.MediaState;
import com.omertron.themoviedbapi.model.media.Video;
import com.omertron.themoviedbapi.model.person.ExternalID;
import com.omertron.themoviedbapi.model.tv.TVSeasonInfo;
import com.omertron.themoviedbapi.results.ResultList;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.MethodSub;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.TmdbParameters;
import com.omertron.themoviedbapi.results.WrapperImages;
import com.omertron.themoviedbapi.results.WrapperVideos;
import java.io.IOException;
import java.net.URL;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Class to hold the TV Methods
*
* @author stuart.boston
*/
public class TmdbSeasons extends AbstractMethod {
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbSeasons(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* Get the primary information about a TV season by its season number.
*
* @param tvID
* @param seasonNumber
* @param language
* @param appendToResponse
* @return
* @throws MovieDbException
*/
public TVSeasonInfo getSeasonInfo(int tvID, int seasonNumber, String language, String... appendToResponse) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.SEASON_NUMBER, seasonNumber);
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.APPEND, appendToResponse);
URL url = new ApiUrl(apiKey, MethodBase.SEASON).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, TVSeasonInfo.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get TV Season Info", url, ex);
}
}
/**
* Look up a TV season's changes by season ID.
*
* @param tvID
* @param startDate
* @param endDate
* @return
* @throws MovieDbException
*/
public ResultList<ChangeKeyItem> getSeasonChanges(int tvID, String startDate, String endDate) throws MovieDbException {
return getMediaChanges(tvID, startDate, endDate);
}
/**
* This method lets users get the status of whether or not the TV episodes of a season have been rated.
*
* A valid session id is required.
*
* @param tvID
* @param sessionID
* @return
* @throws MovieDbException
*/
public MediaState getSeasonAccountState(int tvID, String sessionID) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.SESSION_ID, sessionID);
URL url = new ApiUrl(apiKey, MethodBase.SEASON).subMethod(MethodSub.ACCOUNT_STATES).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, MediaState.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get account state", url, ex);
}
}
/**
* Get the cast & crew credits for a TV season by season number.
*
* @param tvID
* @param seasonNumber
* @return
* @throws MovieDbException
*/
public MediaCreditList getSeasonCredits(int tvID, int seasonNumber) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.SEASON_NUMBER, seasonNumber);
URL url = new ApiUrl(apiKey, MethodBase.SEASON).subMethod(MethodSub.CREDITS).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, MediaCreditList.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get credits", url, ex);
}
}
/**
* Get the external ids that we have stored for a TV season by season number.
*
* @param tvID
* @param seasonNumber
* @param language
* @return
* @throws MovieDbException
*/
public ExternalID getSeasonExternalID(int tvID, int seasonNumber, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.SEASON_NUMBER, seasonNumber);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.SEASON).subMethod(MethodSub.EXTERNAL_IDS).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, ExternalID.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get external IDs", url, ex);
}
}
/**
* Get the images that we have stored for a TV season by season number.
*
* @param tvID
* @param seasonNumber
* @param language
* @param includeImageLanguage
* @return
* @throws MovieDbException
*/
public ResultList<Artwork> getSeasonImages(int tvID, int seasonNumber, String language, String... includeImageLanguage) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.SEASON_NUMBER, seasonNumber);
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.APPEND, includeImageLanguage);
URL url = new ApiUrl(apiKey, MethodBase.SEASON).subMethod(MethodSub.IMAGES).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
WrapperImages wrapper = MAPPER.readValue(webpage, WrapperImages.class);
ResultList<Artwork> results = new ResultList<>(wrapper.getAll());
wrapper.setResultProperties(results);
return results;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get images", url, ex);
}
}
/**
* Get the videos that have been added to a TV season (trailers, teasers, etc...)
*
* @param tvID
* @param seasonNumber
* @param language
* @return
* @throws MovieDbException
*/
public ResultList<Video> getSeasonVideos(int tvID, int seasonNumber, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.SEASON_NUMBER, seasonNumber);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.SEASON).subMethod(MethodSub.VIDEOS).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
WrapperVideos wrapper = MAPPER.readValue(webpage, WrapperVideos.class);
ResultList<Video> results = new ResultList<>(wrapper.getVideos());
wrapper.setResultProperties(results);
return results;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get videos", url, ex);
}
}
}
@@ -0,0 +1,464 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.methods;
import com.omertron.themoviedbapi.MovieDbException;
import static com.omertron.themoviedbapi.methods.AbstractMethod.MAPPER;
import com.omertron.themoviedbapi.model.StatusCode;
import com.omertron.themoviedbapi.model.artwork.Artwork;
import com.omertron.themoviedbapi.model.change.ChangeKeyItem;
import com.omertron.themoviedbapi.model.keyword.Keyword;
import com.omertron.themoviedbapi.model.media.AlternativeTitle;
import com.omertron.themoviedbapi.model.media.MediaCreditList;
import com.omertron.themoviedbapi.model.media.MediaState;
import com.omertron.themoviedbapi.model.media.Translation;
import com.omertron.themoviedbapi.model.media.Video;
import com.omertron.themoviedbapi.model.person.ContentRating;
import com.omertron.themoviedbapi.model.person.ExternalID;
import com.omertron.themoviedbapi.model.tv.TVInfo;
import com.omertron.themoviedbapi.results.ResultList;
import com.omertron.themoviedbapi.results.WrapperGenericList;
import com.omertron.themoviedbapi.results.WrapperImages;
import com.omertron.themoviedbapi.results.WrapperTranslations;
import com.omertron.themoviedbapi.results.WrapperVideos;
import com.omertron.themoviedbapi.tools.ApiUrl;
import com.omertron.themoviedbapi.tools.HttpTools;
import com.omertron.themoviedbapi.tools.MethodBase;
import com.omertron.themoviedbapi.tools.MethodSub;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.PostBody;
import com.omertron.themoviedbapi.tools.PostTools;
import com.omertron.themoviedbapi.tools.TmdbParameters;
import java.io.IOException;
import java.net.URL;
import org.yamj.api.common.exception.ApiExceptionType;
/**
* Class to hold the TV Methods
*
* @author stuart.boston
*/
public class TmdbTV extends AbstractMethod {
private static final int RATING_MAX = 10;
/**
* Constructor
*
* @param apiKey
* @param httpTools
*/
public TmdbTV(String apiKey, HttpTools httpTools) {
super(apiKey, httpTools);
}
/**
* Get the primary information about a TV series by id.
*
* @param tvID
* @param language
* @param appendToResponse
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public TVInfo getTVInfo(int tvID, String language, String... appendToResponse) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.APPEND, appendToResponse);
URL url = new ApiUrl(apiKey, MethodBase.TV).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, TVInfo.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get TV Info", url, ex);
}
}
/**
* This method lets users get the status of whether or not the TV show has
* been rated or added to their favourite or watch lists.
*
* A valid session id is required.
*
* @param tvID
* @param sessionID
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public MediaState getTVAccountState(int tvID, String sessionID) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.SESSION_ID, sessionID);
URL url = new ApiUrl(apiKey, MethodBase.TV).subMethod(MethodSub.ACCOUNT_STATES).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, MediaState.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get account state", url, ex);
}
}
/**
* Get the alternative titles for a specific show ID.
*
* @param tvID
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public ResultList<AlternativeTitle> getTVAlternativeTitles(int tvID) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
URL url = new ApiUrl(apiKey, MethodBase.TV).subMethod(MethodSub.ALT_TITLES).buildUrl(parameters);
WrapperGenericList<AlternativeTitle> wrapper = processWrapper(getTypeReference(AlternativeTitle.class), url, "alternative titles");
return wrapper.getResultsList();
}
/**
* Get the changes for a specific TV show id.
*
* @param tvID
* @param startDate
* @param endDate
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public ResultList<ChangeKeyItem> getTVChanges(int tvID, String startDate, String endDate) throws MovieDbException {
return getMediaChanges(tvID, startDate, endDate);
}
/**
* Get the content ratings for a specific TV show id.
*
* @param tvID
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public ResultList<ContentRating> getTVContentRatings(int tvID) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
URL url = new ApiUrl(apiKey, MethodBase.TV).subMethod(MethodSub.CONTENT_RATINGS).buildUrl(parameters);
WrapperGenericList<ContentRating> wrapper = processWrapper(getTypeReference(ContentRating.class), url, "content rating");
return wrapper.getResultsList();
}
/**
* Get the cast & crew information about a TV series.
*
* @param tvID
* @param language
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public MediaCreditList getTVCredits(int tvID, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.TV).subMethod(MethodSub.CREDITS).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, MediaCreditList.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get credits", url, ex);
}
}
/**
* Get the external ids that we have stored for a TV series.
*
* @param tvID
* @param language
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public ExternalID getTVExternalIDs(int tvID, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.TV).subMethod(MethodSub.EXTERNAL_IDS).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, ExternalID.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get external IDs", url, ex);
}
}
/**
* Get the images (posters and backdrops) for a TV series.
*
* @param tvID
* @param language
* @param includeImageLanguage
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public ResultList<Artwork> getTVImages(int tvID, String language, String... includeImageLanguage) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.INCLUDE_IMAGE_LANGUAGE, includeImageLanguage);
URL url = new ApiUrl(apiKey, MethodBase.TV).subMethod(MethodSub.IMAGES).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
WrapperImages wrapper = MAPPER.readValue(webpage, WrapperImages.class);
ResultList<Artwork> results = new ResultList<>(wrapper.getAll());
wrapper.setResultProperties(results);
return results;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get images", url, ex);
}
}
/**
* Get the plot keywords for a specific TV show id.
*
* @param tvID
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public ResultList<Keyword> getTVKeywords(int tvID) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
URL url = new ApiUrl(apiKey, MethodBase.TV).subMethod(MethodSub.KEYWORDS).buildUrl(parameters);
WrapperGenericList<Keyword> wrapper = processWrapper(getTypeReference(Keyword.class), url, "keywords");
return wrapper.getResultsList();
}
/**
* This method lets users rate a TV show.
*
* A valid session id or guest session id is required.
*
* @param tvID
* @param rating
* @param sessionID
* @param guestSessionID
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public StatusCode postTVRating(int tvID, int rating, String sessionID, String guestSessionID) throws MovieDbException {
if (rating < 0 || rating > RATING_MAX) {
throw new MovieDbException(ApiExceptionType.UNKNOWN_CAUSE, "Rating out of range");
}
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.SESSION_ID, sessionID);
parameters.add(Param.GUEST_SESSION_ID, guestSessionID);
URL url = new ApiUrl(apiKey, MethodBase.TV).subMethod(MethodSub.RATING).buildUrl(parameters);
String jsonBody = new PostTools()
.add(PostBody.VALUE, rating)
.build();
String webpage = httpTools.postRequest(url, jsonBody);
try {
return MAPPER.readValue(webpage, StatusCode.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to post rating", url, ex);
}
}
/**
* Get the similar TV shows for a specific tv id.
*
* @param tvID
* @param page
* @param language
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public ResultList<TVInfo> getTVSimilar(int tvID, Integer page, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.PAGE, page);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.TV).subMethod(MethodSub.SIMILAR).buildUrl(parameters);
WrapperGenericList<TVInfo> wrapper = processWrapper(getTypeReference(TVInfo.class), url, "similar TV shows");
return wrapper.getResultsList();
}
/**
* Get the list of translations that exist for a TV series. These
* translations cascade down to the episode level.
*
* @param tvID
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public ResultList<Translation> getTVTranslations(int tvID) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
URL url = new ApiUrl(apiKey, MethodBase.TV).subMethod(MethodSub.TRANSLATIONS).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
WrapperTranslations wrapper = MAPPER.readValue(webpage, WrapperTranslations.class);
ResultList<Translation> results = new ResultList<>(wrapper.getTranslations());
wrapper.setResultProperties(results);
return results;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get translations", url, ex);
}
}
/**
* Get the videos that have been added to a TV series (trailers, opening
* credits, etc...)
*
* @param tvID
* @param language
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public ResultList<Video> getTVVideos(int tvID, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.ID, tvID);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.TV).subMethod(MethodSub.VIDEOS).buildUrl(parameters);
String webpage = httpTools.getRequest(url);
try {
WrapperVideos wrapper = MAPPER.readValue(webpage, WrapperVideos.class);
ResultList<Video> results = new ResultList<>(wrapper.getVideos());
wrapper.setResultProperties(results);
return results;
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get videos", url, ex);
}
}
/**
* Get the latest TV show id.
*
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public TVInfo getLatestTV() throws MovieDbException {
URL url = new ApiUrl(apiKey, MethodBase.TV).subMethod(MethodSub.LATEST).buildUrl();
String webpage = httpTools.getRequest(url);
try {
return MAPPER.readValue(webpage, TVInfo.class);
} catch (IOException ex) {
throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to get latest TV show", url, ex);
}
}
/**
* Get the list of TV shows that are currently on the air.
*
* This query looks for any TV show that has an episode with an air date in
* the next 7 days.
*
* @param page
* @param language
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public ResultList<TVInfo> getTVOnTheAir(Integer page, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.PAGE, page);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.TV).subMethod(MethodSub.ON_THE_AIR).buildUrl(parameters);
WrapperGenericList<TVInfo> wrapper = processWrapper(getTypeReference(TVInfo.class), url, "on the air");
return wrapper.getResultsList();
}
/**
* Get the list of TV shows that air today.
*
* Without a specified timezone, this query defaults to EST
*
* @param page
* @param language
* @param timezone
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public ResultList<TVInfo> getTVAiringToday(Integer page, String language, String timezone) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.PAGE, page);
parameters.add(Param.LANGUAGE, language);
parameters.add(Param.TIMEZONE, timezone);
URL url = new ApiUrl(apiKey, MethodBase.TV).subMethod(MethodSub.AIRING_TODAY).buildUrl(parameters);
WrapperGenericList<TVInfo> wrapper = processWrapper(getTypeReference(TVInfo.class), url, "airing today");
return wrapper.getResultsList();
}
/**
* Get the list of top rated TV shows.
*
* By default, this list will only include TV shows that have 2 or more
* votes.
*
* This list refreshes every day.
*
* @param page
* @param language
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public ResultList<TVInfo> getTVTopRated(Integer page, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.PAGE, page);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.TV).subMethod(MethodSub.TOP_RATED).buildUrl(parameters);
WrapperGenericList<TVInfo> wrapper = processWrapper(getTypeReference(TVInfo.class), url, "top rated TV shows");
return wrapper.getResultsList();
}
/**
* Get the list of popular TV shows. This list refreshes every day.
*
* @param page
* @param language
* @return
* @throws com.omertron.themoviedbapi.MovieDbException
*/
public ResultList<TVInfo> getTVPopular(Integer page, String language) throws MovieDbException {
TmdbParameters parameters = new TmdbParameters();
parameters.add(Param.PAGE, page);
parameters.add(Param.LANGUAGE, language);
URL url = new ApiUrl(apiKey, MethodBase.TV).subMethod(MethodSub.POPULAR).buildUrl(parameters);
WrapperGenericList<TVInfo> wrapper = processWrapper(getTypeReference(TVInfo.class), url, "popular TV shows");
return wrapper.getResultsList();
}
}
@@ -1,44 +1,44 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
* TheMovieDB API is free software: you can redistribute it and/or modify * TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation;private either version 3 of the License;private or
* any later version. * any later version.
* *
* TheMovieDB API is distributed in the hope that it will be useful, * TheMovieDB API is distributed in the hope that it will be useful;private
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not;private see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.model;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRootName; import com.omertron.themoviedbapi.interfaces.Identification;
import java.io.Serializable;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
/** /**
* @author stuart.boston *
* @author Stuart.Boston
*/ */
@JsonRootName("production_company") public class AbstractIdName extends AbstractJsonMapping implements Serializable, Identification {
public class ProductionCompany extends AbstractJsonMapping {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 100L;
/*
* Properties
*/
@JsonProperty("id") @JsonProperty("id")
private int id; private int id;
@JsonProperty("name") @JsonProperty("name")
private String name; private String name;
//<editor-fold defaultstate="collapsed" desc="Getter methods"> @Override
public int getId() { public int getId() {
return id; return id;
} }
@@ -47,6 +47,7 @@ public class ProductionCompany extends AbstractJsonMapping {
return name; return name;
} }
@Override
public void setId(int id) { public void setId(int id) {
this.id = id; this.id = id;
} }
@@ -56,28 +57,23 @@ public class ProductionCompany extends AbstractJsonMapping {
} }
@Override @Override
public boolean equals(Object obj) { public boolean equals(final Object obj) {
if (obj == null) { if (obj instanceof AbstractIdName) {
final AbstractIdName other = (AbstractIdName) obj;
return new EqualsBuilder()
.append(name, other.name)
.append(id, other.id)
.isEquals();
} else {
return false; return false;
} }
if (getClass() != obj.getClass()) {
return false;
}
final ProductionCompany other = (ProductionCompany) obj;
if (this.id != other.id) {
return false;
}
if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
return false;
}
return true;
} }
@Override @Override
public int hashCode() { public int hashCode() {
int hash = 5; return new HashCodeBuilder()
hash = 37 * hash + this.id; .append(id)
hash = 37 * hash + (this.name != null ? this.name.hashCode() : 0); .append(name)
return hash; .toHashCode();
} }
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -20,21 +20,21 @@
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.model;
import com.fasterxml.jackson.annotation.JsonAnySetter; import com.fasterxml.jackson.annotation.JsonAnySetter;
import java.io.Serializable;
import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle; import org.apache.commons.lang3.builder.ToStringStyle;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.Serializable;
/** /**
* @author Holger Brandl * Abstract class to handle any unknown properties by outputting a log message
*
* @author stuart.boston
*/ */
public abstract class AbstractJsonMapping implements Serializable { public abstract class AbstractJsonMapping implements Serializable {
private static Logger getLogger(Class<?> aClass) { private static final long serialVersionUID = 100L;
return LoggerFactory.getLogger(aClass); private static final Logger LOG = LoggerFactory.getLogger(AbstractJsonMapping.class);
}
/** /**
* Handle unknown properties and print a message * Handle unknown properties and print a message
@@ -43,16 +43,16 @@ public abstract class AbstractJsonMapping implements Serializable {
* @param value * @param value
*/ */
@JsonAnySetter @JsonAnySetter
public void handleUnknown(String key, Object value) { protected void handleUnknown(String key, Object value) {
StringBuilder sb = new StringBuilder(); StringBuilder unknown = new StringBuilder(this.getClass().getSimpleName());
sb.append("Unknown property: '").append(key); unknown.append(": Unknown property='").append(key)
sb.append("' value: '").append(value).append("'"); .append("' value='").append(value).append("'");
getLogger(this.getClass()).warn(sb.toString()); LOG.trace(unknown.toString());
} }
@Override @Override
public String toString() { public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SIMPLE_STYLE); return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
} }
} }
@@ -0,0 +1,61 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation;private either version 3 of the License;private or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful;private
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not;private see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRootName;
import java.io.Serializable;
@JsonRootName("certification")
public class Certification extends AbstractJsonMapping implements Serializable {
private static final long serialVersionUID = 100L;
// Properties
@JsonProperty("certification")
private String value;
@JsonProperty("meaning")
private String meaning;
@JsonProperty("order")
private int order;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getMeaning() {
return meaning;
}
public void setMeaning(String meaning) {
this.meaning = meaning;
}
public int getOrder() {
return order;
}
public void setOrder(int order) {
this.order = order;
}
}
@@ -1,46 +0,0 @@
package com.omertron.themoviedbapi.model;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ChangeKeyItem {
private static final long serialVersionUID = 1L;
@JsonProperty("key")
private String key;
@JsonProperty("items")
private List<ChangedItem> changedItems = new ArrayList<ChangedItem>();
private Map<String, Object> newItems = new HashMap<String, Object>();
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public List<ChangedItem> getChangedItems() {
return changedItems;
}
public void setChangedItems(List<ChangedItem> changes) {
this.changedItems = changes;
}
@JsonAnyGetter
public Map<String, Object> getNewItems() {
return this.newItems;
}
@JsonAnySetter
public void setNewItems(String name, Object value) {
this.newItems.put(name, value);
}
}
@@ -1,74 +0,0 @@
package com.omertron.themoviedbapi.model;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.HashMap;
import java.util.Map;
public class ChangedItem extends AbstractJsonMapping {
private static final long serialVersionUID = 1L;
@JsonProperty("id")
private String id;
@JsonProperty("action")
private String action;
@JsonProperty("time")
private String time;
@JsonProperty("iso_639_1")
private String language;
@JsonProperty("value")
private Object value;
private Map<String, Object> newItems = new HashMap<String, Object>();
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
@JsonAnyGetter
public Map<String, Object> getNewItems() {
return this.newItems;
}
@JsonAnySetter
public void setNewItems(String name, Object value) {
this.newItems.put(name, value);
}
}
@@ -1,140 +0,0 @@
/*
* Copyright (c) 2004-2013 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRootName;
import org.apache.commons.lang3.StringUtils;
/**
* @author stuart.boston
*/
@JsonRootName("collection")
public class Collection extends AbstractJsonMapping {
private static final long serialVersionUID = 1L;
/*
* Properties
*/
@JsonProperty("id")
private int id;
@JsonProperty("title")
private String title;
@JsonProperty("name")
private String name;
@JsonProperty("poster_path")
private String posterPath;
@JsonProperty("backdrop_path")
private String backdropPath;
@JsonProperty("release_date")
private String releaseDate;
//<editor-fold defaultstate="collapsed" desc="Getter methods">
public String getBackdropPath() {
return backdropPath;
}
public int getId() {
return id;
}
public String getPosterPath() {
return posterPath;
}
public String getReleaseDate() {
return releaseDate;
}
public String getTitle() {
if (StringUtils.isBlank(title)) {
return name;
}
return title;
}
public String getName() {
if (StringUtils.isBlank(name)) {
return title;
}
return name;
}
public void setBackdropPath(String backdropPath) {
this.backdropPath = backdropPath;
}
public void setId(int id) {
this.id = id;
}
public void setPosterPath(String posterPath) {
this.posterPath = posterPath;
}
public void setReleaseDate(String releaseDate) {
this.releaseDate = releaseDate;
}
public void setTitle(String title) {
this.title = title;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Collection other = (Collection) obj;
if ((this.backdropPath == null) ? (other.backdropPath != null) : !this.backdropPath.equals(other.backdropPath)) {
return false;
}
if (this.id != other.id) {
return false;
}
if ((this.title == null) ? (other.title != null) : !this.title.equals(other.title)) {
return false;
}
if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 7;
hash = 19 * hash + (this.backdropPath != null ? this.backdropPath.hashCode() : 0);
hash = 19 * hash + this.id;
hash = 19 * hash + (this.title != null ? this.title.hashCode() : 0);
hash = 19 * hash + (this.name != null ? this.name.hashCode() : 0);
hash = 19 * hash + (this.posterPath != null ? this.posterPath.hashCode() : 0);
hash = 19 * hash + (this.releaseDate != null ? this.releaseDate.hashCode() : 0);
return hash;
}
}
@@ -1,264 +0,0 @@
/*
* Copyright (c) 2004-2013 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation;private either version 3 of the License;private or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful;private
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not;private see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model;
import org.apache.commons.lang3.StringUtils;
import java.util.HashMap;
import java.util.Map;
import static com.omertron.themoviedbapi.tools.ApiUrl.*;
/**
* Generate a discover object for use in the MovieDbApi
* <p/>
* This allows you to just add the search components you are concerned with
*
* @author stuart.boston
*/
public class Discover {
private Map<String, String> params = new HashMap<String, String>();
private static final String PARAM_PRIMARY_RELEASE_YEAR = "primary_release_year=";
private static final String PARAM_VOTE_COUNT_GTE = "vote_count.gte=";
private static final String PARAM_VOTE_AVERAGE_GTE = "vote_average.gte=";
private static final String PARAM_WITH_GENRES = "with_genres=";
private static final String PARAM_RELEASE_DATE_GTE = "release_date.gte=";
private static final String PARAM_RELEASE_DATE_LTE = "release_date.lte=";
private static final String PARAM_CERTIFICATION_COUNTRY = "certification_country=";
private static final String PARAM_CERTIFICATION_LTE = "certification.lte=";
private static final String PARAM_WITH_COMPANIES = "with_companies=";
private static final String PARAM_SORT_BY = "sort_by=";
private static final int YEAR_MIN = 1900;
private static final int YEAR_MAX = 2100;
/**
* Get the parameters
* <p/>
* This will be used to construct the URL in the API
*
* @return
*/
public Map<String, String> getParams() {
return params;
}
/**
* Minimum value is 1 if included.
*
* @param page
*/
public Discover page(int page) {
if (page > 0) {
params.put(PARAM_PAGE, String.valueOf(page));
}
return this;
}
/**
* ISO 639-1 code
*
* @param language
*/
public Discover language(String language) {
if (StringUtils.isNotBlank(language)) {
params.put(PARAM_LANGUAGE, language);
}
return this;
}
/**
* Available options are <br>
* vote_average.desc<br>
* vote_average.asc<br>
* release_date.desc<br>
* release_date.asc<br>
* popularity.desc<br>
* popularity.asc
*
* @param sortBy
*/
public Discover sortBy(String sortBy) {
if (StringUtils.isNotBlank(sortBy)) {
params.put(PARAM_SORT_BY, sortBy);
}
return this;
}
/**
* Toggle the inclusion of adult titles
*
* @param includeAdult
*/
public Discover includeAdult(boolean includeAdult) {
params.put(PARAM_ADULT, String.valueOf(includeAdult));
return this;
}
/**
* Filter the results release dates to matches that include this value.
*
* @param year
*/
public Discover year(int year) {
if (checkYear(year)) {
params.put(PARAM_YEAR, String.valueOf(year));
}
return this;
}
/**
* Filter the results so that only the primary release date year has this value
*
* @param primaryReleaseYear
*/
public Discover primaryReleaseYear(int primaryReleaseYear) {
if (checkYear(primaryReleaseYear)) {
params.put(PARAM_PRIMARY_RELEASE_YEAR, String.valueOf(primaryReleaseYear));
}
return this;
}
/**
* Only include movies that are equal to, or have a vote count higher than this value
*
* @param voteCountGte
*/
public Discover voteCountGte(int voteCountGte) {
if (voteCountGte > 0) {
params.put(PARAM_VOTE_COUNT_GTE, String.valueOf(voteCountGte));
}
return this;
}
/**
* Only include movies that are equal to, or have a higher average rating than this value
*
* @param voteAverageGte
*/
public Discover voteAverageGte(float voteAverageGte) {
if (voteAverageGte > 0) {
params.put(PARAM_VOTE_AVERAGE_GTE, String.valueOf(voteAverageGte));
}
return this;
}
/**
* Only include movies with the specified genres.
* <p/>
* Expected value is an integer (the id of a genre).
* <p/>
* Multiple values can be specified.
* <p/>
* Comma separated indicates an 'AND' query, while a pipe (|) separated value indicates an 'OR'
*
* @param withGenres
*/
public Discover withGenres(String withGenres) {
if (StringUtils.isNotBlank(withGenres)) {
params.put(PARAM_WITH_GENRES, withGenres);
}
return this;
}
/**
* The minimum release to include.
* <p/>
* Expected format is YYYY-MM-DD.
*
* @param releaseDateGte
*/
public Discover releaseDateGte(String releaseDateGte) {
if (StringUtils.isNotBlank(releaseDateGte)) {
params.put(PARAM_RELEASE_DATE_GTE, releaseDateGte);
}
return this;
}
/**
* The maximum release to include.
* <p/>
* Expected format is YYYY-MM-DD.
*
* @param releaseDateLte
*/
public Discover releaseDateLte(String releaseDateLte) {
if (StringUtils.isNotBlank(releaseDateLte)) {
params.put(PARAM_RELEASE_DATE_LTE, releaseDateLte);
}
return this;
}
/**
* Only include movies with certifications for a specific country.
* <p/>
* When this value is specified, 'certificationLte' is required.
* <p/>
* A ISO 3166-1 is expected
*
* @param certificationCountry
*/
public Discover certificationCountry(String certificationCountry) {
if (StringUtils.isNotBlank(certificationCountry)) {
params.put(PARAM_CERTIFICATION_COUNTRY, certificationCountry);
}
return this;
}
/**
* Only include movies with this certification and lower.
* <p/>
* Expected value is a valid certification for the specified 'certificationCountry'.
*
* @param certificationLte
*/
public Discover certificationLte(String certificationLte) {
if (StringUtils.isNotBlank(certificationLte)) {
params.put(PARAM_CERTIFICATION_LTE, certificationLte);
}
return this;
}
/**
* Filter movies to include a specific company.
* <p/>
* Expected value is an integer (the id of a company).
* <p/>
* They can be comma separated to indicate an 'AND' query
*
* @param withCompanies
*/
public Discover withCompanies(String withCompanies) {
if (StringUtils.isNotBlank(withCompanies)) {
params.put(PARAM_WITH_COMPANIES, withCompanies);
}
return this;
}
/**
* check the year is between the min and max
*
* @param year
* @return
*/
private boolean checkYear(int year) {
return (year >= YEAR_MIN && year <= YEAR_MAX);
}
}
@@ -0,0 +1,89 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.omertron.themoviedbapi.model.movie.MovieBasic;
import com.omertron.themoviedbapi.model.person.PersonFind;
import com.omertron.themoviedbapi.model.tv.TVBasic;
import com.omertron.themoviedbapi.model.tv.TVEpisodeBasic;
import com.omertron.themoviedbapi.model.tv.TVSeasonBasic;
import java.io.Serializable;
import java.util.List;
/**
* @author stuart.boston
*/
public class FindResults extends AbstractJsonMapping implements Serializable {
private static final long serialVersionUID = 100L;
@JsonProperty("movie_results")
private List<MovieBasic> movieResults;
@JsonProperty("person_results")
private List<PersonFind> personResults;
@JsonProperty("tv_results")
private List<TVBasic> tvResults;
@JsonProperty("tv_season_results")
private List<TVSeasonBasic> tvSeasonResults;
@JsonProperty("tv_episode_results")
private List<TVEpisodeBasic> tvEpisodeResults;
public List<MovieBasic> getMovieResults() {
return movieResults;
}
public void setMovieResults(List<MovieBasic> movieResults) {
this.movieResults = movieResults;
}
public List<PersonFind> getPersonResults() {
return personResults;
}
public void setPersonResults(List<PersonFind> personResults) {
this.personResults = personResults;
}
public List<TVBasic> getTvResults() {
return tvResults;
}
public void setTvResults(List<TVBasic> tvResults) {
this.tvResults = tvResults;
}
public List<TVSeasonBasic> getTvSeasonResults() {
return tvSeasonResults;
}
public void setTvSeasonResults(List<TVSeasonBasic> tvSeasonResults) {
this.tvSeasonResults = tvSeasonResults;
}
public List<TVEpisodeBasic> getTvEpisodeResults() {
return tvEpisodeResults;
}
public void setTvEpisodeResults(List<TVEpisodeBasic> tvEpisodeResults) {
this.tvEpisodeResults = tvEpisodeResults;
}
}
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -19,64 +19,15 @@
*/ */
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRootName; import com.fasterxml.jackson.annotation.JsonRootName;
import java.io.Serializable;
/** /**
* @author stuart.boston * @author stuart.boston
*/ */
@JsonRootName("genre") @JsonRootName("genre")
public class Genre extends AbstractJsonMapping { public class Genre extends AbstractIdName implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 100L;
/* // Nothing to override from the base class.
* Properties
*/
@JsonProperty("id")
private int id;
@JsonProperty("name")
private String name;
//<editor-fold defaultstate="collapsed" desc="Getter methods">
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Genre other = (Genre) obj;
if (this.id != other.id) {
return false;
}
if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 5;
hash = 53 * hash + this.id;
hash = 53 * hash + (this.name != null ? this.name.hashCode() : 0);
return hash;
}
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -21,33 +21,33 @@ package com.omertron.themoviedbapi.model;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRootName; import com.fasterxml.jackson.annotation.JsonRootName;
import java.io.Serializable;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
/** /**
* @author stuart.boston * @author stuart.boston
*/ */
@JsonRootName("spoken_language") @JsonRootName("spoken_language")
public class Language extends AbstractJsonMapping { public class Language extends AbstractJsonMapping implements Serializable {
private static final long serialVersionUID = 100L;
private static final long serialVersionUID = 1L;
/*
* Properties
*/
@JsonProperty("iso_639_1") @JsonProperty("iso_639_1")
private String isoCode; private String code;
@JsonProperty("name") @JsonProperty("name")
private String name; private String name;
//<editor-fold defaultstate="collapsed" desc="Getter methods"> public String getCode() {
public String getIsoCode() { return code;
return isoCode;
} }
public String getName() { public String getName() {
return name; return name;
} }
public void setIsoCode(String isoCode) { public void setCode(String code) {
this.isoCode = isoCode; this.code = code;
} }
public void setName(String name) { public void setName(String name) {
@@ -56,27 +56,22 @@ public class Language extends AbstractJsonMapping {
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if (obj == null) { if (obj instanceof Language) {
final Language other = (Language) obj;
return new EqualsBuilder()
.append(code, other.code)
.append(name, other.name)
.isEquals();
} else {
return false; return false;
} }
if (getClass() != obj.getClass()) {
return false;
}
final Language other = (Language) obj;
if ((this.isoCode == null) ? (other.isoCode != null) : !this.isoCode.equals(other.isoCode)) {
return false;
}
if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
return false;
}
return true;
} }
@Override @Override
public int hashCode() { public int hashCode() {
int hash = 7; return new HashCodeBuilder()
hash = 71 * hash + (this.isoCode != null ? this.isoCode.hashCode() : 0); .append(code)
hash = 71 * hash + (this.name != null ? this.name.hashCode() : 0); .append(name)
return hash; .toHashCode();
} }
} }
@@ -1,423 +0,0 @@
/*
* Copyright (c) 2004-2013 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.omertron.themoviedbapi.wrapper.*;
import java.util.List;
/**
* Movie Bean
*
* @author stuart.boston
*/
public class MovieDb extends AbstractJsonMapping {
private static final long serialVersionUID = 1L;
/*
* Properties
*/
@JsonProperty("backdrop_path")
private String backdropPath;
@JsonProperty("id")
private int id;
@JsonProperty("original_title")
private String originalTitle;
@JsonProperty("popularity")
private float popularity;
@JsonProperty("poster_path")
private String posterPath;
@JsonProperty("release_date")
private String releaseDate;
@JsonProperty("title")
private String title;
@JsonProperty("adult")
private boolean adult;
@JsonProperty("belongs_to_collection")
private Collection belongsToCollection;
@JsonProperty("budget")
private long budget;
@JsonProperty("genres")
private List<Genre> genres;
@JsonProperty("homepage")
private String homepage;
@JsonProperty("imdb_id")
private String imdbID;
@JsonProperty("overview")
private String overview;
@JsonProperty("production_companies")
private List<ProductionCompany> productionCompanies;
@JsonProperty("production_countries")
private List<ProductionCountry> productionCountries;
@JsonProperty("revenue")
private long revenue;
@JsonProperty("runtime")
private int runtime;
@JsonProperty("spoken_languages")
private List<Language> spokenLanguages;
@JsonProperty("tagline")
private String tagline;
@JsonProperty("rating")
private float userRating;
@JsonProperty("vote_average")
private float voteAverage;
@JsonProperty("vote_count")
private int voteCount;
@JsonProperty("status")
private String status;
// AppendToResponse Properties
@JsonProperty("alternative_titles")
private WrapperAlternativeTitles alternativeTitles;
@JsonProperty("casts")
private WrapperMovieCasts casts;
@JsonProperty("images")
private WrapperImages images;
@JsonProperty("keywords")
private WrapperMovieKeywords keywords;
@JsonProperty("releases")
private WrapperReleaseInfo releases;
@JsonProperty("trailers")
private WrapperTrailers trailers;
@JsonProperty("translations")
private WrapperTranslations translations;
@JsonProperty("similar_movies")
private WrapperMovie similarMovies;
@JsonProperty("reviews")
private WrapperReviews reviews;
@JsonProperty("lists")
private WrapperMovieList lists;
// <editor-fold defaultstate="collapsed" desc="Getter methods">
public String getBackdropPath() {
return backdropPath;
}
public int getId() {
return id;
}
public String getOriginalTitle() {
return originalTitle;
}
public float getPopularity() {
return popularity;
}
public String getPosterPath() {
return posterPath;
}
public String getReleaseDate() {
return releaseDate;
}
public String getTitle() {
return title;
}
public boolean isAdult() {
return adult;
}
public Collection getBelongsToCollection() {
return belongsToCollection;
}
public long getBudget() {
return budget;
}
public List<Genre> getGenres() {
return genres;
}
public String getHomepage() {
return homepage;
}
public String getImdbID() {
return imdbID;
}
public String getOverview() {
return overview;
}
public List<ProductionCompany> getProductionCompanies() {
return productionCompanies;
}
public List<ProductionCountry> getProductionCountries() {
return productionCountries;
}
public long getRevenue() {
return revenue;
}
public int getRuntime() {
return runtime;
}
public List<Language> getSpokenLanguages() {
return spokenLanguages;
}
public String getTagline() {
return tagline;
}
public float getVoteAverage() {
return voteAverage;
}
public int getVoteCount() {
return voteCount;
}
public String getStatus() {
return status;
}
public float getUserRating() {
return userRating;
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="Setter methods">
public void setBackdropPath(String backdropPath) {
this.backdropPath = backdropPath;
}
public void setId(int id) {
this.id = id;
}
public void setOriginalTitle(String originalTitle) {
this.originalTitle = originalTitle;
}
public void setPopularity(float popularity) {
this.popularity = popularity;
}
public void setPosterPath(String posterPath) {
this.posterPath = posterPath;
}
public void setReleaseDate(String releaseDate) {
this.releaseDate = releaseDate;
}
public void setTitle(String title) {
this.title = title;
}
public void setAdult(boolean adult) {
this.adult = adult;
}
public void setBelongsToCollection(Collection belongsToCollection) {
this.belongsToCollection = belongsToCollection;
}
public void setBudget(long budget) {
this.budget = budget;
}
public void setGenres(List<Genre> genres) {
this.genres = genres;
}
public void setHomepage(String homepage) {
this.homepage = homepage;
}
public void setImdbID(String imdbID) {
this.imdbID = imdbID;
}
public void setOverview(String overview) {
this.overview = overview;
}
public void setProductionCompanies(List<ProductionCompany> productionCompanies) {
this.productionCompanies = productionCompanies;
}
public void setProductionCountries(List<ProductionCountry> productionCountries) {
this.productionCountries = productionCountries;
}
public void setRevenue(long revenue) {
this.revenue = revenue;
}
public void setRuntime(int runtime) {
this.runtime = runtime;
}
public void setSpokenLanguages(List<Language> spokenLanguages) {
this.spokenLanguages = spokenLanguages;
}
public void setTagline(String tagline) {
this.tagline = tagline;
}
public void setVoteAverage(float voteAverage) {
this.voteAverage = voteAverage;
}
public void setVoteCount(int voteCount) {
this.voteCount = voteCount;
}
public void setStatus(String status) {
this.status = status;
}
public void setUserRating(float userRating) {
this.userRating = userRating;
}
// </editor-fold>
//<editor-fold defaultstate="collapsed" desc="AppendToResponse Getters">
public List<AlternativeTitle> getAlternativeTitles() {
return alternativeTitles.getTitles();
}
public List<PersonCast> getCast() {
return casts.getCast();
}
public List<PersonCrew> getCrew() {
return casts.getCrew();
}
public List<Artwork> getImages() {
return images.getAll();
}
public List<Keyword> getKeywords() {
return keywords.getKeywords();
}
public List<ReleaseInfo> getReleases() {
return releases.getCountries();
}
public List<Trailer> getTrailers() {
return trailers.getAll();
}
public List<Translation> getTranslations() {
return translations.getTranslations();
}
public List<MovieDb> getSimilarMovies() {
return similarMovies.getMovies();
}
public List<MovieList> getLists() {
return lists.getMovieList();
}
public List<Reviews> getReviews() {
return reviews.getReviews();
}
// </editor-fold>
//<editor-fold defaultstate="collapsed" desc="AppendToResponse Setters">
public void setAlternativeTitles(WrapperAlternativeTitles alternativeTitles) {
this.alternativeTitles = alternativeTitles;
}
public void setCasts(WrapperMovieCasts casts) {
this.casts = casts;
}
public void setImages(WrapperImages images) {
this.images = images;
}
public void setKeywords(WrapperMovieKeywords keywords) {
this.keywords = keywords;
}
public void setReleases(WrapperReleaseInfo releases) {
this.releases = releases;
}
public void setTrailers(WrapperTrailers trailers) {
this.trailers = trailers;
}
public void setTranslations(WrapperTranslations translations) {
this.translations = translations;
}
public void setSimilarMovies(WrapperMovie similarMovies) {
this.similarMovies = similarMovies;
}
public void setLists(WrapperMovieList lists) {
this.lists = lists;
}
public void setReviews(WrapperReviews reviews) {
this.reviews = reviews;
}
// </editor-fold>
//<editor-fold defaultstate="collapsed" desc="Equals and HashCode">
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final MovieDb other = (MovieDb) obj;
if (this.id != other.id) {
return false;
}
if ((this.imdbID == null) ? (other.imdbID != null) : !this.imdbID.equals(other.imdbID)) {
return false;
}
if (this.runtime != other.runtime) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 5;
hash = 89 * hash + this.id;
hash = 89 * hash + (this.imdbID != null ? this.imdbID.hashCode() : 0);
hash = 89 * hash + this.runtime;
return hash;
}
// </editor-fold>
}
@@ -1,299 +0,0 @@
/*
* Copyright (c) 2004-2013 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
/**
* @author stuart.boston
*/
public class Person extends AbstractJsonMapping {
private static final long serialVersionUID = 1L;
/*
* Static fields for default cast information
*/
private static final String CAST_DEPARTMENT = "acting";
private static final String CAST_JOB = "actor";
private static final String DEFAULT_STRING = "";
/*
* Properties
*/
@JsonProperty("id")
private int id = -1;
@JsonProperty("name")
private String name = "";
@JsonProperty("profile_path")
private String profilePath = DEFAULT_STRING;
private PersonType personType = PersonType.PERSON;
private String department = DEFAULT_STRING; // Crew
private String job = DEFAULT_STRING; // Crew
private String character = DEFAULT_STRING; // Cast
private int order = -1; // Cast
@JsonProperty("adult")
private boolean adult = false; // Person info
@JsonProperty("also_known_as")
private List<String> aka = new ArrayList<String>();
@JsonProperty("biography")
private String biography = DEFAULT_STRING;
@JsonProperty("birthday")
private String birthday = DEFAULT_STRING;
@JsonProperty("deathday")
private String deathday = DEFAULT_STRING;
@JsonProperty("homepage")
private String homepage = DEFAULT_STRING;
@JsonProperty("place_of_birth")
private String birthplace = DEFAULT_STRING;
@JsonProperty("imdb_id")
private String imdbId = DEFAULT_STRING;
@JsonProperty("popularity")
private float popularity = 0.0f;
/**
* Add a crew member
*
* @param id
* @param name
* @param profilePath
* @param department
* @param job
*/
public void addCrew(int id, String name, String profilePath, String department, String job) {
setPersonType(PersonType.CREW);
setId(id);
setName(name);
setProfilePath(profilePath);
setDepartment(department);
setJob(job);
setCharacter("");
setOrder(-1);
}
/**
* Add a cast member
*
* @param id
* @param name
* @param profilePath
* @param character
* @param order
*/
public void addCast(int id, String name, String profilePath, String character, int order) {
setPersonType(PersonType.CAST);
setId(id);
setName(name);
setProfilePath(profilePath);
setCharacter(character);
setOrder(order);
setDepartment(CAST_DEPARTMENT);
setJob(CAST_JOB);
}
// <editor-fold defaultstate="collapsed" desc="Getter methods">
public String getCharacter() {
return character;
}
public String getDepartment() {
return department;
}
public int getId() {
return id;
}
public String getJob() {
return job;
}
public String getName() {
return name;
}
public int getOrder() {
return order;
}
public PersonType getPersonType() {
return personType;
}
public String getProfilePath() {
return profilePath;
}
public boolean isAdult() {
return adult;
}
public List<String> getAka() {
return aka;
}
public String getBiography() {
return biography;
}
public String getBirthday() {
return birthday;
}
public String getBirthplace() {
return birthplace;
}
public String getDeathday() {
return deathday;
}
public String getHomepage() {
return homepage;
}
public String getImdbId() {
return imdbId;
}
public float getPopularity() {
return popularity;
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="Setter methods">
public void setCharacter(String character) {
this.character = character;
}
public void setDepartment(String department) {
this.department = department;
}
public void setId(int id) {
this.id = id;
}
public void setJob(String job) {
this.job = StringUtils.trimToEmpty(job);
}
public void setName(String name) {
this.name = StringUtils.trimToEmpty(name);
}
public void setOrder(int order) {
this.order = order;
}
public void setPersonType(PersonType personType) {
this.personType = personType;
}
public void setProfilePath(String profilePath) {
this.profilePath = StringUtils.trimToEmpty(profilePath);
}
public void setAdult(boolean adult) {
this.adult = adult;
}
public void setAka(List<String> aka) {
this.aka = aka;
}
public void setBiography(String biography) {
this.biography = StringUtils.trimToEmpty(biography);
}
public void setBirthday(String birthday) {
this.birthday = StringUtils.trimToEmpty(birthday);
}
public void setBirthplace(String birthplace) {
this.birthplace = StringUtils.trimToEmpty(birthplace);
}
public void setDeathday(String deathday) {
this.deathday = StringUtils.trimToEmpty(deathday);
}
public void setHomepage(String homepage) {
this.homepage = StringUtils.trimToEmpty(homepage);
}
public void setImdbId(String imdbId) {
this.imdbId = StringUtils.trimToEmpty(imdbId);
}
public void setPopularity(float popularity) {
this.popularity = popularity;
}
// </editor-fold>
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Person other = (Person) obj;
if (this.id != other.id) {
return false;
}
if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
return false;
}
if ((this.profilePath == null) ? (other.profilePath != null) : !this.profilePath.equals(other.profilePath)) {
return false;
}
if (this.personType != other.personType) {
return false;
}
if ((this.department == null) ? (other.department != null) : !this.department.equals(other.department)) {
return false;
}
if ((this.job == null) ? (other.job != null) : !this.job.equals(other.job)) {
return false;
}
if ((this.character == null) ? (other.character != null) : !this.character.equals(other.character)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 3;
hash = 37 * hash + this.id;
hash = 37 * hash + (this.name != null ? this.name.hashCode() : 0);
hash = 37 * hash + (this.profilePath != null ? this.profilePath.hashCode() : 0);
hash = 37 * hash + (this.personType != null ? this.personType.hashCode() : 0);
hash = 37 * hash + (this.department != null ? this.department.hashCode() : 0);
hash = 37 * hash + (this.job != null ? this.job.hashCode() : 0);
hash = 37 * hash + (this.character != null ? this.character.hashCode() : 0);
return hash;
}
}
@@ -1,134 +0,0 @@
/*
* Copyright (c) 2004-2013 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.apache.commons.lang3.StringUtils;
/**
* @author Stuart
*/
public class PersonCast extends AbstractJsonMapping {
private static final long serialVersionUID = 1L;
/*
* Properties
*/
@JsonProperty("id")
private int id;
@JsonProperty("character")
private String character;
@JsonProperty("name")
private String name;
@JsonProperty("order")
private int order;
@JsonProperty("profile_path")
private String profilePath;
@JsonProperty("cast_id")
private int castId;
//<editor-fold defaultstate="collapsed" desc="Getter methods">
public String getCharacter() {
return character;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getOrder() {
return order;
}
public String getProfilePath() {
return profilePath;
}
public int getCastId() {
return castId;
}
public void setCharacter(String character) {
this.character = StringUtils.trimToEmpty(character);
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = StringUtils.trimToEmpty(name);
}
public void setOrder(int order) {
this.order = order;
}
public void setProfilePath(String profilePath) {
this.profilePath = StringUtils.trimToEmpty(profilePath);
}
public void setCastId(int castId) {
this.castId = castId;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final PersonCast other = (PersonCast) obj;
if (this.id != other.id) {
return false;
}
if ((this.character == null) ? (other.character != null) : !this.character.equals(other.character)) {
return false;
}
if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
return false;
}
if (this.order != other.order) {
return false;
}
if ((this.profilePath == null) ? (other.profilePath != null) : !this.profilePath.equals(other.profilePath)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 7;
hash = 41 * hash + this.id;
hash = 41 * hash + (this.character != null ? this.character.hashCode() : 0);
hash = 41 * hash + (this.name != null ? this.name.hashCode() : 0);
hash = 41 * hash + this.order;
hash = 41 * hash + (this.profilePath != null ? this.profilePath.hashCode() : 0);
return hash;
}
}
@@ -1,135 +0,0 @@
/*
* Copyright (c) 2004-2013 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.apache.commons.lang3.StringUtils;
/**
* @author stuart.boston
*/
public class PersonCredit extends AbstractJsonMapping {
private static final long serialVersionUID = 1L;
private static final String DEFAULT_STRING = "";
/*
* Properties
*/
@JsonProperty("id")
private int movieId = 0;
@JsonProperty("character")
private String character = DEFAULT_STRING;
@JsonProperty("original_title")
private String movieOriginalTitle = DEFAULT_STRING;
@JsonProperty("poster_path")
private String posterPath = DEFAULT_STRING;
@JsonProperty("release_date")
private String releaseDate = DEFAULT_STRING;
@JsonProperty("title")
private String movieTitle = DEFAULT_STRING;
@JsonProperty("department")
private String department = DEFAULT_STRING;
@JsonProperty("job")
private String job = DEFAULT_STRING;
@JsonProperty("adult")
private String adult = DEFAULT_STRING;
private PersonType personType = PersonType.PERSON;
//<editor-fold defaultstate="collapsed" desc="Getter Methods">
public String getCharacter() {
return character;
}
public String getDepartment() {
return department;
}
public String getJob() {
return job;
}
public int getMovieId() {
return movieId;
}
public String getMovieOriginalTitle() {
return movieOriginalTitle;
}
public String getMovieTitle() {
return movieTitle;
}
public PersonType getPersonType() {
return personType;
}
public String getPosterPath() {
return posterPath;
}
public String getReleaseDate() {
return releaseDate;
}
public String getAdult() {
return adult;
}
public void setCharacter(String character) {
this.character = StringUtils.trimToEmpty(character);
}
public void setDepartment(String department) {
this.department = StringUtils.trimToEmpty(department);
}
public void setJob(String job) {
this.job = StringUtils.trimToEmpty(job);
}
public void setMovieId(int movieId) {
this.movieId = movieId;
}
public void setMovieOriginalTitle(String movieOriginalTitle) {
this.movieOriginalTitle = StringUtils.trimToEmpty(movieOriginalTitle);
}
public void setMovieTitle(String movieTitle) {
this.movieTitle = StringUtils.trimToEmpty(movieTitle);
}
public void setPersonType(PersonType personType) {
this.personType = personType;
}
public void setPosterPath(String posterPath) {
this.posterPath = StringUtils.trimToEmpty(posterPath);
}
public void setReleaseDate(String releaseDate) {
this.releaseDate = StringUtils.trimToEmpty(releaseDate);
}
public void setAdult(String adult) {
this.adult = StringUtils.trimToEmpty(adult);
}
}
@@ -1,121 +0,0 @@
/*
* Copyright (c) 2004-2013 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.apache.commons.lang3.StringUtils;
/**
* @author Stuart
*/
public class PersonCrew extends AbstractJsonMapping {
private static final long serialVersionUID = 1L;
/*
* Properties
*/
@JsonProperty("id")
private int id;
@JsonProperty("department")
private String department;
@JsonProperty("job")
private String job;
@JsonProperty("name")
private String name;
@JsonProperty("profile_path")
private String profilePath;
//<editor-fold defaultstate="collapsed" desc="Getter methods">
public String getDepartment() {
return department;
}
public int getId() {
return id;
}
public String getJob() {
return job;
}
public String getName() {
return name;
}
public String getProfilePath() {
return profilePath;
}
public void setDepartment(String department) {
this.department = StringUtils.trimToEmpty(department);
}
public void setId(int id) {
this.id = id;
}
public void setJob(String job) {
this.job = StringUtils.trimToEmpty(job);
}
public void setName(String name) {
this.name = StringUtils.trimToEmpty(name);
}
public void setProfilePath(String profilePath) {
this.profilePath = StringUtils.trimToEmpty(profilePath);
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final PersonCrew other = (PersonCrew) obj;
if (this.id != other.id) {
return false;
}
if ((this.department == null) ? (other.department != null) : !this.department.equals(other.department)) {
return false;
}
if ((this.job == null) ? (other.job != null) : !this.job.equals(other.job)) {
return false;
}
if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 7;
hash = 59 * hash + this.id;
hash = 59 * hash + (this.department != null ? this.department.hashCode() : 0);
hash = 59 * hash + (this.job != null ? this.job.hashCode() : 0);
hash = 59 * hash + (this.name != null ? this.name.hashCode() : 0);
hash = 59 * hash + (this.profilePath != null ? this.profilePath.hashCode() : 0);
return hash;
}
}
@@ -1,95 +0,0 @@
/*
* Copyright (c) 2004-2013 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* @author Stuart
*/
public class ReleaseInfo extends AbstractJsonMapping {
private static final long serialVersionUID = 1L;
/*
* Properties
*/
@JsonProperty("iso_3166_1")
private String country;
@JsonProperty("certification")
private String certification;
@JsonProperty("release_date")
private String releaseDate;
//<editor-fold defaultstate="collapsed" desc="Getter methods">
public String getCertification() {
return certification;
}
public String getCountry() {
return country;
}
public String getReleaseDate() {
return releaseDate;
}
public void setCertification(String certification) {
this.certification = certification;
}
public void setCountry(String country) {
this.country = country;
}
public void setReleaseDate(String releaseDate) {
this.releaseDate = releaseDate;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final ReleaseInfo other = (ReleaseInfo) obj;
if ((this.country == null) ? (other.country != null) : !this.country.equals(other.country)) {
return false;
}
if ((this.certification == null) ? (other.certification != null) : !this.certification.equals(other.certification)) {
return false;
}
if ((this.releaseDate == null) ? (other.releaseDate != null) : !this.releaseDate.equals(other.releaseDate)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 3;
hash = 89 * hash + (this.country != null ? this.country.hashCode() : 0);
hash = 89 * hash + (this.certification != null ? this.certification.hashCode() : 0);
hash = 89 * hash + (this.releaseDate != null ? this.releaseDate.hashCode() : 0);
return hash;
}
}
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -26,30 +26,26 @@ import com.fasterxml.jackson.annotation.JsonProperty;
*/ */
public class StatusCode extends AbstractJsonMapping { public class StatusCode extends AbstractJsonMapping {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 100L;
/*
* Properties
*/
@JsonProperty("status_code") @JsonProperty("status_code")
private int statusCode; private int code;
@JsonProperty("status_message") @JsonProperty("status_message")
private String statusMessage; private String message;
//<editor-fold defaultstate="collapsed" desc="Getter methods"> public int getCode() {
public int getStatusCode() { return code;
return statusCode;
} }
public void setStatusCode(int statusCode) { public void setCode(int code) {
this.statusCode = statusCode; this.code = code;
} }
public String getStatusMessage() { public String getMessage() {
return statusMessage; return message;
} }
public void setStatusMessage(String statusMessage) { public void setMessage(String message) {
this.statusMessage = statusMessage; this.message = message;
} }
} }
@@ -1,105 +0,0 @@
/*
* Copyright (c) 2004-2013 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model;
/**
* @author Stuart
*/
public class Trailer extends AbstractJsonMapping {
private static final long serialVersionUID = 1L;
/*
* Website sources
*/
public static final String WEBSITE_YOUTUBE = "youtube";
public static final String WEBSITE_QUICKTIME = "quicktime";
/*
* Properties
*/
private String name;
private String size;
private String source;
private String website; // The website of the trailer
//<editor-fold defaultstate="collapsed" desc="Getter methods">
public String getName() {
return name;
}
public String getSize() {
return size;
}
public String getSource() {
return source;
}
public String getWebsite() {
return website;
}
public void setName(String name) {
this.name = name;
}
public void setSize(String size) {
this.size = size;
}
public void setSource(String source) {
this.source = source;
}
public void setWebsite(String website) {
this.website = website;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Trailer other = (Trailer) obj;
if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
return false;
}
if ((this.size == null) ? (other.size != null) : !this.size.equals(other.size)) {
return false;
}
if ((this.source == null) ? (other.source != null) : !this.source.equals(other.source)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 7;
hash = 61 * hash + (this.name != null ? this.name.hashCode() : 0);
hash = 61 * hash + (this.size != null ? this.size.hashCode() : 0);
hash = 61 * hash + (this.source != null ? this.source.hashCode() : 0);
hash = 61 * hash + (this.website != null ? this.website.hashCode() : 0);
return hash;
}
}
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,11 +17,15 @@
* along with TheMovieDB API. If not;private see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not;private see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.model.account;
import com.omertron.themoviedbapi.model.AbstractJsonMapping;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.omertron.themoviedbapi.interfaces.Identification;
public class Account extends AbstractJsonMapping { public class Account extends AbstractJsonMapping implements Identification {
private static final long serialVersionUID = 100L;
@JsonProperty("id") @JsonProperty("id")
private int id; private int id;
@@ -31,11 +35,19 @@ public class Account extends AbstractJsonMapping {
private String userName; private String userName;
@JsonProperty("include_adult") @JsonProperty("include_adult")
private boolean includeAdult; private boolean includeAdult;
@JsonProperty("iso_639_1")
private String language;
@JsonProperty("iso_3166_1")
private String country;
@JsonProperty("avatar")
private Avatar avatar;
@Override
public int getId() { public int getId() {
return id; return id;
} }
@Override
public void setId(int id) { public void setId(int id) {
this.id = id; this.id = id;
} }
@@ -63,4 +75,28 @@ public class Account extends AbstractJsonMapping {
public void setUserName(String userName) { public void setUserName(String userName) {
this.userName = userName; this.userName = userName;
} }
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public Avatar getAvatar() {
return avatar;
}
public void setAvatar(Avatar avatar) {
this.avatar = avatar;
}
} }
@@ -0,0 +1,38 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation;private either version 3 of the License;private or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful;private
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not;private see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model.account;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.omertron.themoviedbapi.model.AbstractJsonMapping;
public class Avatar extends AbstractJsonMapping {
@JsonProperty("gravatar")
private AvatarHash hash = null;
public String getHash() {
return hash == null ? "" : hash.getHash();
}
public void setHash(AvatarHash hash) {
this.hash = hash;
}
}
@@ -0,0 +1,38 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation;private either version 3 of the License;private or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful;private
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not;private see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model.account;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.omertron.themoviedbapi.model.AbstractJsonMapping;
public class AvatarHash extends AbstractJsonMapping {
@JsonProperty("hash")
private String hash;
public String getHash() {
return hash;
}
public void setHash(String hash) {
this.hash = hash;
}
}
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,22 +17,27 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.model.artwork;
import com.omertron.themoviedbapi.model.AbstractJsonMapping;
import com.omertron.themoviedbapi.enumeration.ArtworkType;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSetter;
import java.io.Serializable;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
/** /**
* The artwork type information * The artwork type information
* *
* @author Stuart * @author Stuart
*/ */
public class Artwork extends AbstractJsonMapping { public class Artwork extends AbstractJsonMapping implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 100L;
/* @JsonProperty("id")
* Properties private String id;
*/
@JsonProperty("aspect_ratio") @JsonProperty("aspect_ratio")
private float aspectRatio; private float aspectRatio;
@JsonProperty("file_path") @JsonProperty("file_path")
@@ -51,121 +56,117 @@ public class Artwork extends AbstractJsonMapping {
private String flag; private String flag;
private ArtworkType artworkType = ArtworkType.POSTER; private ArtworkType artworkType = ArtworkType.POSTER;
// <editor-fold defaultstate="collapsed" desc="Getter methods"> public String getId() {
public ArtworkType getArtworkType() { return id;
return artworkType; }
public void setId(String id) {
this.id = id;
} }
public float getAspectRatio() { public float getAspectRatio() {
return aspectRatio; return aspectRatio;
} }
public String getFilePath() {
return filePath;
}
public int getHeight() {
return height;
}
public String getLanguage() {
return language;
}
public int getWidth() {
return width;
}
public float getVoteAverage() {
return voteAverage;
}
public int getVoteCount() {
return voteCount;
}
public String getFlag() {
return flag;
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="Setter methods">
public void setArtworkType(ArtworkType artworkType) {
this.artworkType = artworkType;
}
public void setAspectRatio(float aspectRatio) { public void setAspectRatio(float aspectRatio) {
this.aspectRatio = aspectRatio; this.aspectRatio = aspectRatio;
} }
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) { public void setFilePath(String filePath) {
this.filePath = filePath; this.filePath = filePath;
} }
public int getHeight() {
return height;
}
public void setHeight(int height) { public void setHeight(int height) {
this.height = height; this.height = height;
} }
public String getLanguage() {
return language;
}
public void setLanguage(String language) { public void setLanguage(String language) {
this.language = language; this.language = language;
} }
public int getWidth() {
return width;
}
public void setWidth(int width) { public void setWidth(int width) {
this.width = width; this.width = width;
} }
public float getVoteAverage() {
return voteAverage;
}
public void setVoteAverage(float voteAverage) { public void setVoteAverage(float voteAverage) {
this.voteAverage = voteAverage; this.voteAverage = voteAverage;
} }
public int getVoteCount() {
return voteCount;
}
public void setVoteCount(int voteCount) { public void setVoteCount(int voteCount) {
this.voteCount = voteCount; this.voteCount = voteCount;
} }
public String getFlag() {
return flag;
}
public void setFlag(String flag) { public void setFlag(String flag) {
this.flag = flag; this.flag = flag;
} }
// </editor-fold>
public ArtworkType getArtworkType() {
return artworkType;
}
public void setArtworkType(ArtworkType artworkType) {
this.artworkType = artworkType;
}
@JsonSetter("image_type")
public void setArtworkType(String artworkType) {
this.artworkType = ArtworkType.fromString(artworkType);
}
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if (obj == null) { if (obj instanceof Artwork) {
final Artwork other = (Artwork) obj;
return new EqualsBuilder()
.append(aspectRatio, other.aspectRatio)
.append(filePath, other.filePath)
.append(language, other.language)
.append(height, other.height)
.append(width, other.width)
.append(artworkType, other.artworkType)
.isEquals();
} else {
return false; return false;
} }
if (getClass() != obj.getClass()) {
return false;
}
final Artwork other = (Artwork) obj;
if (Float.floatToIntBits(this.aspectRatio) != Float.floatToIntBits(other.aspectRatio)) {
return false;
}
if ((this.filePath == null) ? (other.filePath != null) : !this.filePath.equals(other.filePath)) {
return false;
}
if (this.height != other.height) {
return false;
}
if ((this.language == null) ? (other.language != null) : !this.language.equals(other.language)) {
return false;
}
if (this.width != other.width) {
return false;
}
if (this.artworkType != other.artworkType) {
return false;
}
return true;
} }
@Override @Override
public int hashCode() { public int hashCode() {
int hash = 3; return new HashCodeBuilder()
hash = 71 * hash + Float.floatToIntBits(this.aspectRatio); .append(aspectRatio)
hash = 71 * hash + (this.filePath != null ? this.filePath.hashCode() : 0); .append(filePath)
hash = 71 * hash + this.height; .append(height)
hash = 71 * hash + (this.language != null ? this.language.hashCode() : 0); .append(width)
hash = 71 * hash + this.width; .append(language)
hash = 71 * hash + (this.artworkType != null ? this.artworkType.hashCode() : 0); .append(artworkType)
return hash; .toHashCode();
} }
} }
@@ -0,0 +1,100 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model.artwork;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSetter;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.omertron.themoviedbapi.enumeration.MediaType;
import com.omertron.themoviedbapi.model.media.MediaBasic;
import com.omertron.themoviedbapi.model.movie.MovieBasic;
import com.omertron.themoviedbapi.model.tv.TVBasic;
import com.omertron.themoviedbapi.model.tv.TVEpisodeBasic;
import java.io.Serializable;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
/**
*
* @author Stuart
*/
public class ArtworkMedia extends Artwork implements Serializable {
private static final long serialVersionUID = 100L;
private MediaType mediaType;
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.EXTERNAL_PROPERTY,
property = "media_type",
defaultImpl = MediaBasic.class
)
@JsonSubTypes({
@JsonSubTypes.Type(value = MovieBasic.class, name = "movie"),
@JsonSubTypes.Type(value = TVBasic.class, name = "tv"),
@JsonSubTypes.Type(value = TVEpisodeBasic.class, name = "episode")
})
@JsonProperty("media")
private MediaBasic media;
public MediaType getMediaType() {
return mediaType;
}
public void setMediaType(MediaType mediaType) {
this.mediaType = mediaType;
}
@JsonSetter("media_type")
public void setMediaType(String mediaType) {
this.mediaType = MediaType.fromString(mediaType);
}
public MediaBasic getMedia() {
return media;
}
public void setMedia(MediaBasic media) {
this.media = media;
}
@Override
public int hashCode() {
return new HashCodeBuilder()
.appendSuper(super.hashCode())
.append(mediaType)
.toHashCode();
}
@Override
public boolean equals(Object obj) {
if (obj instanceof ArtworkMedia) {
final ArtworkMedia other = (ArtworkMedia) obj;
return new EqualsBuilder()
.appendSuper(super.equals(obj))
.append(mediaType, other.mediaType)
.isEquals();
} else {
return false;
}
}
}
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,17 +17,15 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.model.authentication;
import com.omertron.themoviedbapi.model.AbstractJsonMapping;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import org.apache.commons.lang3.builder.ToStringBuilder; import java.io.Serializable;
import org.apache.commons.lang3.builder.ToStringStyle;
public class TokenAuthorisation { public class TokenAuthorisation extends AbstractJsonMapping implements Serializable {
/* private static final long serialVersionUID = 100L;
* Properties
*/
@JsonProperty("expires_at") @JsonProperty("expires_at")
private String expires; private String expires;
@JsonProperty("request_token") @JsonProperty("request_token")
@@ -35,7 +33,6 @@ public class TokenAuthorisation {
@JsonProperty("success") @JsonProperty("success")
private Boolean success; private Boolean success;
// <editor-fold defaultstate="collapsed" desc="Getter methods">
public String getExpires() { public String getExpires() {
return expires; return expires;
} }
@@ -47,9 +44,7 @@ public class TokenAuthorisation {
public Boolean getSuccess() { public Boolean getSuccess() {
return success; return success;
} }
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="Setter methods">
public void setExpires(String expires) { public void setExpires(String expires) {
this.expires = expires; this.expires = expires;
} }
@@ -61,10 +56,4 @@ public class TokenAuthorisation {
public void setSuccess(Boolean success) { public void setSuccess(Boolean success) {
this.success = success; this.success = success;
} }
// </editor-fold>
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,17 +17,15 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.model.authentication;
import com.omertron.themoviedbapi.model.AbstractJsonMapping;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import org.apache.commons.lang3.builder.ToStringBuilder; import java.io.Serializable;
import org.apache.commons.lang3.builder.ToStringStyle;
public class TokenSession { public class TokenSession extends AbstractJsonMapping implements Serializable {
/* private static final long serialVersionUID = 100L;
* Properties
*/
@JsonProperty("session_id") @JsonProperty("session_id")
private String sessionId; private String sessionId;
@JsonProperty("success") @JsonProperty("success")
@@ -41,7 +39,6 @@ public class TokenSession {
@JsonProperty("expires_at") @JsonProperty("expires_at")
private String expiresAt; private String expiresAt;
// <editor-fold defaultstate="collapsed" desc="Getter methods">
public String getSessionId() { public String getSessionId() {
return sessionId; return sessionId;
} }
@@ -65,9 +62,7 @@ public class TokenSession {
public String getExpiresAt() { public String getExpiresAt() {
return expiresAt; return expiresAt;
} }
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="Setter methods">
public void setSessionId(String sessionId) { public void setSessionId(String sessionId) {
this.sessionId = sessionId; this.sessionId = sessionId;
} }
@@ -91,10 +86,4 @@ public class TokenSession {
public void setExpiresAt(String expiresAt) { public void setExpiresAt(String expiresAt) {
this.expiresAt = expiresAt; this.expiresAt = expiresAt;
} }
// </editor-fold>
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,30 +17,36 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.wrapper; package com.omertron.themoviedbapi.model.change;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.omertron.themoviedbapi.model.KeywordMovie; import com.omertron.themoviedbapi.model.AbstractJsonMapping;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** public class ChangeKeyItem extends AbstractJsonMapping implements Serializable {
*
* @author stuart.boston
*/
public class WrapperKeywordMovies extends AbstractWrapperAll {
@JsonProperty("results") private static final long serialVersionUID = 100L;
private List<KeywordMovie> results; @JsonProperty("key")
private String key;
@JsonProperty("items")
private List<ChangedItem> changedItems = new ArrayList<>();
public WrapperKeywordMovies() { public String getKey() {
super(WrapperKeywordMovies.class); return key;
} }
public List<KeywordMovie> getResults() { public void setKey(String key) {
return results; this.key = key;
} }
public void setResults(List<KeywordMovie> results) { public List<ChangedItem> getChangedItems() {
this.results = results; return changedItems;
} }
public void setChangedItems(List<ChangedItem> changes) {
this.changedItems = changes;
}
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,30 +17,34 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.wrapper; package com.omertron.themoviedbapi.model.change;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.omertron.themoviedbapi.model.MovieDb; import com.omertron.themoviedbapi.model.AbstractJsonMapping;
import java.util.List; import java.io.Serializable;
/** public class ChangeListItem extends AbstractJsonMapping implements Serializable {
*
* @author stuart.boston
*/
public class WrapperCompanyMovies extends AbstractWrapperAll {
@JsonProperty("results") private static final long serialVersionUID = 100L;
private List<MovieDb> results;
public WrapperCompanyMovies() { @JsonProperty("id")
super(WrapperCompanyMovies.class); private int id;
@JsonProperty("adult")
private boolean adult;
public int getId() {
return id;
} }
public List<MovieDb> getResults() { public boolean isAdult() {
return results; return adult;
} }
public void setResults(List<MovieDb> results) { public void setId(int id) {
this.results = results; this.id = id;
}
public void setAdult(boolean adult) {
this.adult = adult;
} }
} }
@@ -0,0 +1,90 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model.change;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.omertron.themoviedbapi.model.AbstractJsonMapping;
import java.io.Serializable;
public class ChangedItem extends AbstractJsonMapping implements Serializable {
private static final long serialVersionUID = 100L;
@JsonProperty("id")
private String id;
@JsonProperty("action")
private String action;
@JsonProperty("time")
private String time;
@JsonProperty("iso_639_1")
private String language;
@JsonProperty("value")
private Object value;
@JsonProperty("original_value")
private Object originalValue;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public Object getOriginalValue() {
return originalValue;
}
public void setOriginalValue(Object originalValue) {
this.originalValue = originalValue;
}
}
@@ -0,0 +1,225 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model.collection;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRootName;
import com.omertron.themoviedbapi.interfaces.Identification;
import com.omertron.themoviedbapi.model.AbstractJsonMapping;
import java.io.Serializable;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
/**
* @author stuart.boston
*/
@JsonRootName("collection")
public class Collection extends AbstractJsonMapping implements Serializable, Identification {
private static final long serialVersionUID = 100L;
@JsonProperty("id")
private int id;
@JsonProperty("title")
private String title;
@JsonProperty("name")
private String name;
@JsonProperty("poster_path")
private String posterPath;
@JsonProperty("backdrop_path")
private String backdropPath;
@JsonProperty("release_date")
private String releaseDate;
@JsonProperty("genre_ids")
private List<Integer> genreIds;
@JsonProperty("adult")
private boolean adult;
@JsonProperty("original_language")
private String originalLanguage;
@JsonProperty("original_title")
private String originalTitle;
@JsonProperty("overview")
private String overview;
@JsonProperty("video")
private boolean video;
@JsonProperty("popularity")
private float popularity;
@JsonProperty("vote_average")
private float voteAverage;
@JsonProperty("vote_count")
private int voteCount;
public String getBackdropPath() {
return backdropPath;
}
@Override
public int getId() {
return id;
}
public String getPosterPath() {
return posterPath;
}
public String getReleaseDate() {
return releaseDate;
}
public String getTitle() {
if (StringUtils.isBlank(title)) {
return name;
}
return title;
}
public String getName() {
if (StringUtils.isBlank(name)) {
return title;
}
return name;
}
public List<Integer> getGenreIds() {
return genreIds;
}
public boolean isAdult() {
return adult;
}
public String getOriginalLanguage() {
return originalLanguage;
}
public void setBackdropPath(String backdropPath) {
this.backdropPath = backdropPath;
}
@Override
public void setId(int id) {
this.id = id;
}
public void setPosterPath(String posterPath) {
this.posterPath = posterPath;
}
public void setReleaseDate(String releaseDate) {
this.releaseDate = releaseDate;
}
public void setTitle(String title) {
this.title = title;
}
public void setName(String name) {
this.name = name;
}
public void setGenreIds(List<Integer> genreIds) {
this.genreIds = genreIds;
}
public void setAdult(boolean adult) {
this.adult = adult;
}
public void setOriginalLanguage(String originalLanguage) {
this.originalLanguage = originalLanguage;
}
public String getOriginalTitle() {
return originalTitle;
}
public void setOriginalTitle(String originalTitle) {
this.originalTitle = originalTitle;
}
public String getOverview() {
return overview;
}
public void setOverview(String overview) {
this.overview = overview;
}
public boolean isVideo() {
return video;
}
public void setVideo(boolean video) {
this.video = video;
}
public float getPopularity() {
return popularity;
}
public void setPopularity(float popularity) {
this.popularity = popularity;
}
public float getVoteAverage() {
return voteAverage;
}
public void setVoteAverage(float voteAverage) {
this.voteAverage = voteAverage;
}
public int getVoteCount() {
return voteCount;
}
public void setVoteCount(int voteCount) {
this.voteCount = voteCount;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Collection) {
final Collection other = (Collection) obj;
return new EqualsBuilder()
.append(id, other.id)
.append(name, other.name)
.append(title, other.title)
.append(backdropPath, other.backdropPath)
.isEquals();
} else {
return false;
}
}
@Override
public int hashCode() {
return new HashCodeBuilder()
.append(id)
.append(backdropPath)
.append(title)
.append(name)
.append(posterPath)
.append(releaseDate)
.toHashCode();
}
}
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,9 +17,12 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.model.collection;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.omertron.themoviedbapi.interfaces.Identification;
import com.omertron.themoviedbapi.model.AbstractJsonMapping;
import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -27,13 +30,10 @@ import java.util.List;
/** /**
* @author Stuart * @author Stuart
*/ */
public class CollectionInfo extends AbstractJsonMapping { public class CollectionInfo extends AbstractJsonMapping implements Serializable, Identification {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 100L;
/*
* Properties
*/
@JsonProperty("id") @JsonProperty("id")
private int id; private int id;
@JsonProperty("name") @JsonProperty("name")
@@ -45,13 +45,13 @@ public class CollectionInfo extends AbstractJsonMapping {
@JsonProperty("backdrop_path") @JsonProperty("backdrop_path")
private String backdropPath; private String backdropPath;
@JsonProperty("parts") @JsonProperty("parts")
private List<Collection> parts = new ArrayList<Collection>(); private List<Collection> parts = new ArrayList<>();
//<editor-fold defaultstate="collapsed" desc="Getter methods">
public String getBackdropPath() { public String getBackdropPath() {
return backdropPath; return backdropPath;
} }
@Override
public int getId() { public int getId() {
return id; return id;
} }
@@ -76,6 +76,7 @@ public class CollectionInfo extends AbstractJsonMapping {
this.backdropPath = backdropPath; this.backdropPath = backdropPath;
} }
@Override
public void setId(int id) { public void setId(int id) {
this.id = id; this.id = id;
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,38 +17,43 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.model.company;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.omertron.themoviedbapi.model.AbstractJsonMapping;
import com.omertron.themoviedbapi.interfaces.Identification;
import java.io.Serializable;
import static org.apache.commons.lang3.StringUtils.EMPTY;
/** /**
* Company information * Company information
* *
* @author Stuart * @author Stuart
*/ */
public class Company extends AbstractJsonMapping { public class Company extends AbstractJsonMapping implements Serializable, Identification {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 100L;
private static final String DEFAULT_STRING = "";
// Properties // Properties
@JsonProperty("id") @JsonProperty("id")
private int companyId = 0; private int id = 0;
@JsonProperty("name") @JsonProperty("name")
private String name = DEFAULT_STRING; private String name = EMPTY;
@JsonProperty("description") @JsonProperty("description")
private String description = DEFAULT_STRING; private String description = EMPTY;
@JsonProperty("headquarters") @JsonProperty("headquarters")
private String headquarters = DEFAULT_STRING; private String headquarters = EMPTY;
@JsonProperty("homepage") @JsonProperty("homepage")
private String homepage = DEFAULT_STRING; private String homepage = EMPTY;
@JsonProperty("logo_path") @JsonProperty("logo_path")
private String logoPath = DEFAULT_STRING; private String logoPath = EMPTY;
@JsonProperty("parent_company") @JsonProperty("parent_company")
private Company parentCompany = null; private Company parentCompany = null;
@JsonProperty("origin_country")
private String originCountry;
//<editor-fold defaultstate="collapsed" desc="Getter Methods"> @Override
public int getCompanyId() { public int getId() {
return companyId; return id;
} }
public String getDescription() { public String getDescription() {
@@ -75,8 +80,9 @@ public class Company extends AbstractJsonMapping {
return parentCompany; return parentCompany;
} }
public void setCompanyId(int companyId) { @Override
this.companyId = companyId; public void setId(int id) {
this.id = id;
} }
public void setDescription(String description) { public void setDescription(String description) {
@@ -105,9 +111,18 @@ public class Company extends AbstractJsonMapping {
public void setParentCompany(int id, String name, String logoPath) { public void setParentCompany(int id, String name, String logoPath) {
Company parent = new Company(); Company parent = new Company();
parent.setCompanyId(companyId); parent.setId(id);
parent.setName(name); parent.setName(name);
parent.setLogoPath(logoPath); parent.setLogoPath(logoPath);
this.parentCompany = parent; this.parentCompany = parent;
} }
public String getOriginCountry() {
return originCountry;
}
public void setOriginCountry(String originCountry) {
this.originCountry = originCountry;
}
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,22 +17,25 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.model.config;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import org.apache.commons.lang3.StringUtils; import com.omertron.themoviedbapi.MovieDbException;
import com.omertron.themoviedbapi.model.AbstractJsonMapping;
import java.io.Serializable;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List; import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.yamj.api.common.exception.ApiExceptionType;
/** /**
* @author stuart.boston * @author stuart.boston
*/ */
public class TmdbConfiguration extends AbstractJsonMapping { public class Configuration extends AbstractJsonMapping implements Serializable {
private static final long serialVersionUID = 100L;
private static final long serialVersionUID = 1L;
/*
* Properties
*/
@JsonProperty("base_url") @JsonProperty("base_url")
private String baseUrl; private String baseUrl;
@JsonProperty("secure_base_url") @JsonProperty("secure_base_url")
@@ -45,8 +48,9 @@ public class TmdbConfiguration extends AbstractJsonMapping {
private List<String> profileSizes; private List<String> profileSizes;
@JsonProperty("logo_sizes") @JsonProperty("logo_sizes")
private List<String> logoSizes; private List<String> logoSizes;
@JsonProperty("still_sizes")
private List<String> stillSizes;
// <editor-fold defaultstate="collapsed" desc="Getter methods">//GEN-BEGIN:getterMethods
public List<String> getBackdropSizes() { public List<String> getBackdropSizes() {
return backdropSizes; return backdropSizes;
} }
@@ -71,8 +75,10 @@ public class TmdbConfiguration extends AbstractJsonMapping {
return secureBaseUrl; return secureBaseUrl;
} }
// </editor-fold> public List<String> getStillSizes() {
// <editor-fold defaultstate="collapsed" desc="Setter methods">//GEN-BEGIN:setterMethods return stillSizes;
}
public void setBackdropSizes(List<String> backdropSizes) { public void setBackdropSizes(List<String> backdropSizes) {
this.backdropSizes = backdropSizes; this.backdropSizes = backdropSizes;
} }
@@ -96,14 +102,17 @@ public class TmdbConfiguration extends AbstractJsonMapping {
public void setSecureBaseUrl(String secureBaseUrl) { public void setSecureBaseUrl(String secureBaseUrl) {
this.secureBaseUrl = secureBaseUrl; this.secureBaseUrl = secureBaseUrl;
} }
// </editor-fold>
public void setStillSizes(List<String> stillSizes) {
this.stillSizes = stillSizes;
}
/** /**
* Copy the data from the passed object to this one * Copy the data from the passed object to this one
* *
* @param config * @param config
*/ */
public void clone(TmdbConfiguration config) { public void clone(Configuration config) {
backdropSizes = config.getBackdropSizes(); backdropSizes = config.getBackdropSizes();
baseUrl = config.getBaseUrl(); baseUrl = config.getBaseUrl();
posterSizes = config.getPosterSizes(); posterSizes = config.getPosterSizes();
@@ -115,6 +124,7 @@ public class TmdbConfiguration extends AbstractJsonMapping {
* Check that the poster size is valid * Check that the poster size is valid
* *
* @param posterSize * @param posterSize
* @return
*/ */
public boolean isValidPosterSize(String posterSize) { public boolean isValidPosterSize(String posterSize) {
if (StringUtils.isBlank(posterSize) || posterSizes.isEmpty()) { if (StringUtils.isBlank(posterSize) || posterSizes.isEmpty()) {
@@ -127,6 +137,7 @@ public class TmdbConfiguration extends AbstractJsonMapping {
* Check that the backdrop size is valid * Check that the backdrop size is valid
* *
* @param backdropSize * @param backdropSize
* @return
*/ */
public boolean isValidBackdropSize(String backdropSize) { public boolean isValidBackdropSize(String backdropSize) {
if (StringUtils.isBlank(backdropSize) || backdropSizes.isEmpty()) { if (StringUtils.isBlank(backdropSize) || backdropSizes.isEmpty()) {
@@ -139,6 +150,7 @@ public class TmdbConfiguration extends AbstractJsonMapping {
* Check that the profile size is valid * Check that the profile size is valid
* *
* @param profileSize * @param profileSize
* @return
*/ */
public boolean isValidProfileSize(String profileSize) { public boolean isValidProfileSize(String profileSize) {
if (StringUtils.isBlank(profileSize) || profileSizes.isEmpty()) { if (StringUtils.isBlank(profileSize) || profileSizes.isEmpty()) {
@@ -151,6 +163,7 @@ public class TmdbConfiguration extends AbstractJsonMapping {
* Check that the logo size is valid * Check that the logo size is valid
* *
* @param logoSize * @param logoSize
* @return
*/ */
public boolean isValidLogoSize(String logoSize) { public boolean isValidLogoSize(String logoSize) {
if (StringUtils.isBlank(logoSize) || logoSizes.isEmpty()) { if (StringUtils.isBlank(logoSize) || logoSizes.isEmpty()) {
@@ -163,11 +176,36 @@ public class TmdbConfiguration extends AbstractJsonMapping {
* Check to see if the size is valid for any of the images types * Check to see if the size is valid for any of the images types
* *
* @param sizeToCheck * @param sizeToCheck
* @return
*/ */
public boolean isValidSize(String sizeToCheck) { public boolean isValidSize(String sizeToCheck) {
return (isValidPosterSize(sizeToCheck) return isValidPosterSize(sizeToCheck)
|| isValidBackdropSize(sizeToCheck) || isValidBackdropSize(sizeToCheck)
|| isValidProfileSize(sizeToCheck) || isValidProfileSize(sizeToCheck)
|| isValidLogoSize(sizeToCheck)); || isValidLogoSize(sizeToCheck);
} }
/**
* Generate the full image URL from the size and image path
*
* @param imagePath
* @param requiredSize
* @return
* @throws MovieDbException
*/
public URL createImageUrl(String imagePath, String requiredSize) throws MovieDbException {
if (!isValidSize(requiredSize)) {
throw new MovieDbException(ApiExceptionType.INVALID_IMAGE, "Required size '" + requiredSize + "' is not valid");
}
StringBuilder sb = new StringBuilder(getBaseUrl());
sb.append(requiredSize).append(imagePath);
try {
return new URL(sb.toString());
} catch (MalformedURLException ex) {
throw new MovieDbException(ApiExceptionType.INVALID_URL, "Failed to create image URL", sb.toString(), ex);
}
}
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,22 +17,22 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.model.config;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.omertron.themoviedbapi.model.AbstractJsonMapping;
import java.io.Serializable;
import java.util.List; import java.util.List;
public class JobDepartment { public class JobDepartment extends AbstractJsonMapping implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 100L;
// Properties // Properties
@JsonProperty("department") @JsonProperty("department")
private String department; private String department;
@JsonProperty("job_list") @JsonProperty("jobs")
private List<String> jobs; private List<String> jobs;
//<editor-fold defaultstate="collapsed" desc="Getters">
public String getDepartment() { public String getDepartment() {
return department; return department;
} }
@@ -41,7 +41,6 @@ public class JobDepartment {
return jobs; return jobs;
} }
//<editor-fold defaultstate="collapsed" desc="Setters">
public void setDepartment(String department) { public void setDepartment(String department) {
this.department = department; this.department = department;
} }
@@ -0,0 +1,202 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model.credits;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSetter;
import com.omertron.themoviedbapi.enumeration.CreditType;
import com.omertron.themoviedbapi.enumeration.MediaType;
import com.omertron.themoviedbapi.interfaces.Identification;
import com.omertron.themoviedbapi.model.AbstractJsonMapping;
import java.io.Serializable;
import java.util.List;
/**
* @author stuart.boston
*/
public class CreditBasic extends AbstractJsonMapping implements Serializable, Identification {
private static final long serialVersionUID = 100L;
private CreditType creditType;
private MediaType mediaType;
@JsonProperty("credit_id")
private String creditId;
@JsonProperty("id")
private int id;
@JsonProperty("poster_path")
private String artworkPath;
@JsonProperty("backdrop_path")
private String backdropPath;
@JsonProperty("genre_ids")
private List<Integer> genreIds;
@JsonProperty("original_language")
private String originalLanguage;
@JsonProperty("overview")
private String overview;
@JsonProperty("popularity")
private float popularity;
@JsonProperty("vote_average")
private float voteAverage;
@JsonProperty("vote_count")
private int voteCount;
//cast
@JsonProperty("character")
private String character;
//crew
@JsonProperty("department")
private String department;
@JsonProperty("job")
private String job;
public CreditType getCreditType() {
return creditType;
}
public void setCreditType(CreditType creditType) {
this.creditType = creditType;
}
public MediaType getMediaType() {
return mediaType;
}
@JsonSetter("media_type")
public void setMediaType(String mediaType) {
this.mediaType = MediaType.fromString(mediaType);
}
public final void setMediaType(MediaType mediaType) {
this.mediaType = mediaType;
}
public String getCreditId() {
return creditId;
}
public void setCreditId(String creditId) {
this.creditId = creditId;
}
@Override
public int getId() {
return id;
}
@Override
public void setId(int id) {
this.id = id;
}
public String getArtworkPath() {
return artworkPath;
}
public void setArtworkPath(String artworkPath) {
this.artworkPath = artworkPath;
}
public String getCharacter() {
return character;
}
public void setCharacter(String character) {
this.character = character;
setCreditType(CreditType.CAST);
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
setCreditType(CreditType.CREW);
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
setCreditType(CreditType.CREW);
}
public String getBackdropPath() {
return backdropPath;
}
public void setBackdropPath(String backdropPath) {
this.backdropPath = backdropPath;
}
public List<Integer> getGenreIds() {
return genreIds;
}
public void setGenreIds(List<Integer> genreIds) {
this.genreIds = genreIds;
}
public String getOriginalLanguage() {
return originalLanguage;
}
public void setOriginalLanguage(String originalLanguage) {
this.originalLanguage = originalLanguage;
}
public String getOverview() {
return overview;
}
public void setOverview(String overview) {
this.overview = overview;
}
public float getPopularity() {
return popularity;
}
public void setPopularity(float popularity) {
this.popularity = popularity;
}
public float getVoteAverage() {
return voteAverage;
}
public void setVoteAverage(float voteAverage) {
this.voteAverage = voteAverage;
}
public int getVoteCount() {
return voteCount;
}
public void setVoteCount(int voteCount) {
this.voteCount = voteCount;
}
}
@@ -0,0 +1,88 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model.credits;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.omertron.themoviedbapi.enumeration.MediaType;
import java.io.Serializable;
/**
* @author stuart.boston
*/
public class CreditMovieBasic extends CreditBasic implements Serializable {
private static final long serialVersionUID = 100L;
@JsonProperty("adult")
private boolean adult;
@JsonProperty("original_title")
private String originalTitle;
@JsonProperty("release_date")
private String releaseDate;
@JsonProperty("title")
private String title;
@JsonProperty("video")
private boolean video;
public CreditMovieBasic() {
setMediaType(MediaType.MOVIE);
}
public boolean isAdult() {
return adult;
}
public void setAdult(boolean adult) {
this.adult = adult;
}
public String getOriginalTitle() {
return originalTitle;
}
public void setOriginalTitle(String originalTitle) {
this.originalTitle = originalTitle;
}
public String getReleaseDate() {
return releaseDate;
}
public void setReleaseDate(String releaseDate) {
this.releaseDate = releaseDate;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public boolean isVideo() {
return video;
}
public void setVideo(boolean video) {
this.video = video;
}
}
@@ -0,0 +1,88 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model.credits;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.omertron.themoviedbapi.enumeration.MediaType;
import java.io.Serializable;
/**
* @author stuart.boston
*/
public class CreditTVBasic extends CreditBasic implements Serializable {
private static final long serialVersionUID = 100L;
@JsonProperty("episode_count")
private int episodeCount;
@JsonProperty("first_air_date")
private String firstAirDate;
@JsonProperty("name")
private String name;
@JsonProperty("original_name")
private String originalName;
@JsonProperty("origin_country")
private String originCountry;
public CreditTVBasic() {
setMediaType(MediaType.TV);
}
public int getEpisodeCount() {
return episodeCount;
}
public void setEpisodeCount(int episodeCount) {
this.episodeCount = episodeCount;
}
public String getFirstAirDate() {
return firstAirDate;
}
public void setFirstAirDate(String firstAirDate) {
this.firstAirDate = firstAirDate;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getOriginalName() {
return originalName;
}
public void setOriginalName(String originalName) {
this.originalName = originalName;
}
public String getOriginCountry() {
return originCountry;
}
public void setOriginCountry(String originCountry) {
this.originCountry = originCountry;
}
}
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,67 +17,72 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.model.credits;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRootName; import com.omertron.themoviedbapi.interfaces.Identification;
import com.omertron.themoviedbapi.model.AbstractJsonMapping;
import java.io.Serializable;
/** /**
* @author stuart.boston *
* @author Stuart.Boston
*/ */
@JsonRootName("keyword") public class MediaCredit extends AbstractJsonMapping implements Serializable, Identification {
public class Keyword extends AbstractJsonMapping {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 100L;
/* @JsonProperty("credit_id")
* Properties private String creditId;
*/
@JsonProperty("id") @JsonProperty("id")
private int id; private int id;
@JsonProperty("profile_path")
private String artworkPath;
@JsonProperty("name") @JsonProperty("name")
private String name; private String name;
@JsonProperty("gender")
private int gender;
//<editor-fold defaultstate="collapsed" desc="Getter methods"> public String getCreditId() {
return creditId;
}
public void setCreditId(String creditId) {
this.creditId = creditId;
}
@Override
public int getId() { public int getId() {
return id; return id;
} }
@Override
public void setId(int id) {
this.id = id;
}
public String getArtworkPath() {
return artworkPath;
}
public void setArtworkPath(String artworkPath) {
this.artworkPath = artworkPath;
}
public String getName() { public String getName() {
return name; return name;
} }
public void setId(int id) {
this.id = id;
}
public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
} }
@Override public int getGender() {
public boolean equals(Object obj) { return gender;
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Keyword other = (Keyword) obj;
if (this.id != other.id) {
return false;
}
if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
return false;
}
return true;
} }
@Override public void setGender(int gender) {
public int hashCode() { this.gender = gender;
int hash = 3;
hash = 83 * hash + this.id;
hash = 83 * hash + (this.name != null ? this.name.hashCode() : 0);
return hash;
} }
} }
@@ -0,0 +1,64 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model.credits;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.io.Serializable;
/**
*
* @author Stuart.Boston
*/
public class MediaCreditCast extends MediaCredit implements Serializable {
private static final long serialVersionUID = 100L;
@JsonProperty("cast_id")
private int castId = 0;
@JsonProperty("character")
private String character;
@JsonProperty("order")
private int order;
public int getCastId() {
return castId;
}
public void setCastId(int castId) {
this.castId = castId;
}
public String getCharacter() {
return character;
}
public void setCharacter(String character) {
this.character = character;
}
public int getOrder() {
return order;
}
public void setOrder(int order) {
this.order = order;
}
}
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,30 +17,38 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.wrapper; package com.omertron.themoviedbapi.model.credits;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.omertron.themoviedbapi.model.Collection; import java.io.Serializable;
import java.util.List;
/** /**
* *
* @author stuart.boston * @author Stuart.Boston
*/ */
public class WrapperCollection extends AbstractWrapperAll { public class MediaCreditCrew extends MediaCredit implements Serializable {
@JsonProperty("results") private static final long serialVersionUID = 100L;
private List<Collection> results;
public WrapperCollection() { @JsonProperty("department")
super(WrapperCollection.class); private String department;
@JsonProperty("job")
private String job;
public String getDepartment() {
return department;
} }
public List<Collection> getResults() { public void setDepartment(String department) {
return results; this.department = department;
} }
public void setResults(List<Collection> results) { public String getJob() {
this.results = results; return job;
} }
public void setJob(String job) {
this.job = job;
}
} }
@@ -0,0 +1,533 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation;private either version 3 of the License;private or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful;private
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not;private see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model.discover;
import com.omertron.themoviedbapi.enumeration.SortBy;
import com.omertron.themoviedbapi.tools.Param;
import com.omertron.themoviedbapi.tools.TmdbParameters;
/**
* Generate a discover object for use in the MovieDbApi
* <p>
* This allows you to just add the search components you are concerned with
*
* @author stuart.boston
*/
public class Discover {
private final TmdbParameters params = new TmdbParameters();
private static final int YEAR_MIN = 1900;
private static final int YEAR_MAX = 2100;
/**
* Get the parameters
* <p>
* This will be used to construct the URL in the API
*
* @return
*/
public TmdbParameters getParams() {
return params;
}
/**
* Minimum value is 1 if included.
*
* @param page
* @return
*/
public Discover page(int page) {
params.add(Param.PAGE, page);
return this;
}
/**
* ISO 639-1 code
*
* @param language
* @return
*/
public Discover language(String language) {
params.add(Param.LANGUAGE, language);
return this;
}
/**
* Available options are <br>
* vote_average.desc<br>
* vote_average.asc<br>
* release_date.desc<br>
* release_date.asc<br>
* popularity.desc<br>
* popularity.asc
*
* @param sortBy
* @return
*/
public Discover sortBy(SortBy sortBy) {
params.add(Param.SORT_BY, sortBy.getPropertyString());
return this;
}
/**
* Toggle the inclusion of adult titles
*
* @param includeAdult
* @return
*/
public Discover includeAdult(boolean includeAdult) {
params.add(Param.ADULT, includeAdult);
return this;
}
/**
* Toggle the inclusion of items marked as a video.
*
* Expected value is a boolean, true or false. Default is true.
*
* @param includeVideo
* @return
*/
public Discover includeVideo(boolean includeVideo) {
params.add(Param.INCLUDE_VIDEO, includeVideo);
return this;
}
/**
* Filter the results release dates to matches that include this value.
*
* @param year
* @return
*/
public Discover year(int year) {
if (checkYear(year)) {
params.add(Param.YEAR, year);
}
return this;
}
/**
* Filter the results so that only the primary release date year has this value
*
* @param primaryReleaseYear
* @return
*/
public Discover primaryReleaseYear(int primaryReleaseYear) {
if (checkYear(primaryReleaseYear)) {
params.add(Param.PRIMARY_RELEASE_YEAR, primaryReleaseYear);
}
return this;
}
/**
* The primary minimum release to include.
* <p>
* Expected format is YYYY-MM-DD.
*
* @param primaryReleaseDateGte
* @return
*/
public Discover primaryReleaseDateGte(String primaryReleaseDateGte) {
params.add(Param.PRIMARY_RELEASE_DATE_GTE, primaryReleaseDateGte);
return this;
}
/**
* The primary maximum release to include.
* <p>
* Expected format is YYYY-MM-DD.
*
* @param primaryReleaseDateLte
* @return
*/
public Discover primaryReleaseDateLte(String primaryReleaseDateLte) {
params.add(Param.PRIMARY_RELEASE_DATE_LTE, primaryReleaseDateLte);
return this;
}
/**
* Only include movies that are equal to, or have a vote count higher than this value
*
* @param voteCountGte
* @return
*/
public Discover voteCountGte(int voteCountGte) {
params.add(Param.VOTE_COUNT_GTE, voteCountGte);
return this;
}
/**
* Only include movies that are equal to, or have a vote count higher than this value
*
* @param voteCountLte
* @return
*/
public Discover voteCountLte(int voteCountLte) {
params.add(Param.VOTE_COUNT_LTE, voteCountLte);
return this;
}
/**
* Only include movies that are equal to, or have a higher average rating than this value
*
* @param voteAverageGte
* @return
*/
public Discover voteAverageGte(float voteAverageGte) {
params.add(Param.VOTE_AVERAGE_GTE, voteAverageGte);
return this;
}
/**
* Only include movies that are less than or equal to this value
*
* @param voteAverageLte
* @return
*/
public Discover voteAverageLte(float voteAverageLte) {
params.add(Param.VOTE_AVERAGE_LTE, voteAverageLte);
return this;
}
/**
* The minimum release to include.
* <p>
* Expected format is YYYY-MM-DD.
*
* @param releaseDateGte
* @return
*/
public Discover releaseDateGte(String releaseDateGte) {
params.add(Param.RELEASE_DATE_GTE, releaseDateGte);
return this;
}
/**
* The maximum release to include.
* <p>
* Expected format is YYYY-MM-DD.
*
* @param releaseDateLte
* @return
*/
public Discover releaseDateLte(String releaseDateLte) {
params.add(Param.RELEASE_DATE_LTE, releaseDateLte);
return this;
}
/**
* Only include movies with certifications for a specific country.
* <p>
* When this value is specified, 'certificationLte' is required.
* <p>
* A ISO 3166-1 is expected
*
* @param certificationCountry
* @return
*/
public Discover certificationCountry(String certificationCountry) {
params.add(Param.CERTIFICATION_COUNTRY, certificationCountry);
return this;
}
/**
* Only include movies with this certification and lower.
* <p>
* Expected value is a valid certification for the specified 'certificationCountry'.
*
* @param certificationLte
* @return
*/
public Discover certificationLte(String certificationLte) {
params.add(Param.CERTIFICATION_LTE, certificationLte);
return this;
}
/**
* Only include movies with this certification.
*
* Expected value is a valid certification for the specified 'certificationCountry'.
*
* @param certification
* @return
*/
public Discover certification(String certification) {
params.add(Param.CERTIFICATION, certification);
return this;
}
/**
* Only include movies that have this person id added as a cast member.
*
* Expected value is an integer (the id of a person).
*
* Comma separated indicates an 'AND' query, while a pipe (|) separated value indicates an 'OR'
*
* @param withCast
* @return
*/
public Discover withCast(String withCast) {
params.add(Param.WITH_CAST, withCast);
return this;
}
/**
* Only include media that have these person IDs added as cast members.
*
* Use the WithBuilder to generate the list,e.g.
*
* new WithBuilder(1).and(2).and(3)
*
* @param withCast
* @return
*/
public Discover withCast(WithBuilder withCast) {
return withCast(withCast.build());
}
/**
* Only include movies that have this person id added as a crew member.
*
* Expected value is an integer (the id of a person).
*
* Comma separated indicates an 'AND' query, while a pipe (|) separated value indicates an 'OR'.
*
* @param withCrew
* @return
*/
public Discover withCrew(String withCrew) {
params.add(Param.WITH_CREW, withCrew);
return this;
}
/**
* Only include media that have these person IDs added as crew members.
*
* Use the WithBuilder to generate the list,e.g.
*
* new WithBuilder(1).and(2).and(3)
*
* @param withCrew
* @return
*/
public Discover withCrew(WithBuilder withCrew) {
return withCrew(withCrew.build());
}
/**
* Filter movies to include a specific company.
*
* Expected value is an integer (the id of a company).
*
* Comma separated indicates an 'AND' query, while a pipe (|) separated value indicates an 'OR'
*
* @param withCompanies
* @return
*/
public Discover withCompanies(String withCompanies) {
params.add(Param.WITH_COMPANIES, withCompanies);
return this;
}
/**
* Filter movies to include a specific company.
*
* Use the WithBuilder to generate the list,e.g.
*
* new WithBuilder(1).and(2).and(3)
*
* @param withCompanies
* @return
*/
public Discover withCompanies(WithBuilder withCompanies) {
return withCompanies(withCompanies.build());
}
/**
* Only include movies with the specified genres.
* <p>
* Expected value is an integer (the id of a genre).
* <p>
* Multiple values can be specified.
* <p>
* Comma separated indicates an 'AND' query, while a pipe (|) separated value indicates an 'OR'
*
* @param withGenres
* @return
*/
public Discover withGenres(String withGenres) {
params.add(Param.WITH_GENRES, withGenres);
return this;
}
/**
* Only include movies with the specified genres.
*
* Use the WithBuilder to generate the list,e.g.
*
* new WithBuilder(1).and(2).and(3)
*
* @param withGenres
* @return
*/
public Discover withGenres(WithBuilder withGenres) {
return withGenres(withGenres.build());
}
/**
* Only include movies with the specified genres.
*
* Expected value is an integer (the id of a genre).
*
* Comma separated indicates an 'AND' query, while a pipe (|) separated value indicates an 'OR'.
*
* @param withKeywords
* @return
*/
public Discover withKeywords(String withKeywords) {
params.add(Param.WITH_KEYWORDS, withKeywords);
return this;
}
/**
* Only include movies with the specified genres.
*
* Use the WithBuilder to generate the list,e.g.
*
* new WithBuilder(1).and(2).and(3)
*
* @param withKeywords
* @return
*/
public Discover withKeywords(WithBuilder withKeywords) {
return withKeywords(withKeywords.build());
}
/**
* Only include movies that have these person id's added as a cast or crew member.
*
* Expected value is an integer (the id or ids of a person).
*
* Comma separated indicates an 'AND' query, while a pipe (|) separated value indicates an 'OR'.
*
* @param withPeople
* @return
*/
public Discover withPeople(String withPeople) {
params.add(Param.WITH_PEOPLE, withPeople);
return this;
}
/**
* Only include movies that have these person id's added as a cast or crew member.
*
* Use the WithBuilder to generate the list,e.g.
*
* new WithBuilder(1).and(2).and(3)
*
* @param withPeople
* @return
*/
public Discover withPeople(WithBuilder withPeople) {
return withPeople(withPeople.build());
}
/**
* Filter the air dates that match this year
*
* Expected value is a year.
*
* @param year
* @return
*/
public Discover firstAirDateYear(int year) {
if (checkYear(year)) {
params.add(Param.FIRST_AIR_DATE_YEAR, year);
}
return this;
}
/**
* Filter the air dates to years that are greater than or equal to this year
*
* @param year
* @return
*/
public Discover firstAirDateYearGte(int year) {
if (checkYear(year)) {
params.add(Param.FIRST_AIR_DATE_GTE, year);
}
return this;
}
/**
* Filter the air dates to years that are less than or equal to this year
*
* @param year
* @return
*/
public Discover firstAirDateYearLte(int year) {
if (checkYear(year)) {
params.add(Param.FIRST_AIR_DATE_LTE, year);
}
return this;
}
/**
* Filter TV shows to include a specific network.
*
* Expected value is an integer (the id of a network).
*
* They can be comma separated to indicate an 'AND' query.
*
* @param withNetworks
* @return
*/
public Discover withNetworks(String withNetworks) {
params.add(Param.WITH_NETWORKS, withNetworks);
return this;
}
/**
* Filter TV shows to include a specific network.
*
* Use the WithBuilder to generate the list,e.g.
*
* new WithBuilder(1).and(2).and(3)
*
* @param withNetworks
* @return
*/
public Discover withNetworks(WithBuilder withNetworks) {
return withNetworks(withNetworks.build());
}
/**
* check the year is between the min and max
*
* @param year
* @return
*/
private boolean checkYear(int year) {
return year >= YEAR_MIN && year <= YEAR_MAX;
}
}
@@ -0,0 +1,112 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model.discover;
/**
* Class to create a String for the "with???" parameters of the Discover method
*
* @author Stuart
*/
public class WithBuilder {
StringBuilder value = new StringBuilder();
/**
* Create the first ID in the string
*
* @param id
*/
public WithBuilder(int id) {
value.append(id);
}
/**
* Create the first ID in the string
*
* @param id
*/
public WithBuilder(String id) {
value.append(id);
}
/**
* Generate the string to pass to the method
*
* @return
*/
public String build() {
return value.toString();
}
/**
* Generate the string to pass to the method
*
* @return
*/
@Override
public String toString() {
return build();
}
/**
* Add an "AND ID"
*
* @param id
* @return
*/
public WithBuilder and(int id) {
value.append(",").append(id);
return this;
}
/**
* Add an "AND ID"
*
* @param id
* @return
*/
public WithBuilder and(String id) {
value.append(",").append(id);
return this;
}
/**
* Add an "OR ID"
*
* @param id
* @return
*/
public WithBuilder or(int id) {
value.append("|").append(id);
return this;
}
/**
* Add an "OR ID"
*
* @param id
* @return
*/
public WithBuilder or(String id) {
value.append("|").append(id);
return this;
}
}
@@ -0,0 +1,34 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model.keyword;
import com.fasterxml.jackson.annotation.JsonRootName;
import com.omertron.themoviedbapi.model.AbstractIdName;
import java.io.Serializable;
/**
* @author stuart.boston
*/
@JsonRootName("keyword")
public class Keyword extends AbstractIdName implements Serializable {
private static final long serialVersionUID = 100L;
// Nothing to override from the base class.
}
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,23 +17,24 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.model.list;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.omertron.themoviedbapi.model.AbstractJsonMapping;
import java.io.Serializable;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
* Wrapper for the MovieDbList function * Wrapper for the ListItem function
* *
* @author stuart.boston * @author stuart.boston
* @param <T> Type of list
*/ */
public class MovieDbList extends AbstractJsonMapping { public class ListItem<T> extends AbstractJsonMapping implements Serializable {
private static final long serialVersionUID = 100L;
/*
* Properties
*/
@JsonProperty("id") @JsonProperty("id")
private String id; private String id;
@JsonProperty("created_by") @JsonProperty("created_by")
@@ -43,7 +44,7 @@ public class MovieDbList extends AbstractJsonMapping {
@JsonProperty("favorite_count") @JsonProperty("favorite_count")
private int favoriteCount; private int favoriteCount;
@JsonProperty("items") @JsonProperty("items")
private List<MovieDb> items = Collections.EMPTY_LIST; private List<T> items = Collections.emptyList();
@JsonProperty("item_count") @JsonProperty("item_count")
private int itemCount; private int itemCount;
@JsonProperty("iso_639_1") @JsonProperty("iso_639_1")
@@ -57,7 +58,6 @@ public class MovieDbList extends AbstractJsonMapping {
@JsonProperty("status_message") @JsonProperty("status_message")
private String statusMessage; private String statusMessage;
//<editor-fold defaultstate="collapsed" desc="Getter Methods">
public String getId() { public String getId() {
return id; return id;
} }
@@ -74,7 +74,7 @@ public class MovieDbList extends AbstractJsonMapping {
return favoriteCount; return favoriteCount;
} }
public List<MovieDb> getItems() { public List<T> getItems() {
return items; return items;
} }
@@ -101,9 +101,7 @@ public class MovieDbList extends AbstractJsonMapping {
public String getStatusMessage() { public String getStatusMessage() {
return statusMessage; return statusMessage;
} }
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Setter Methods">
public void setId(String id) { public void setId(String id) {
this.id = id; this.id = id;
} }
@@ -120,7 +118,7 @@ public class MovieDbList extends AbstractJsonMapping {
this.favoriteCount = favoriteCount; this.favoriteCount = favoriteCount;
} }
public void setItems(List<MovieDb> items) { public void setItems(List<T> items) {
this.items = items; this.items = items;
} }
@@ -147,5 +145,4 @@ public class MovieDbList extends AbstractJsonMapping {
public void setStatusMessage(String statusMessage) { public void setStatusMessage(String statusMessage) {
this.statusMessage = statusMessage; this.statusMessage = statusMessage;
} }
//</editor-fold>
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,8 +17,9 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.model.list;
import com.omertron.themoviedbapi.model.AbstractJsonMapping;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
/** /**
@@ -26,13 +27,23 @@ import com.fasterxml.jackson.annotation.JsonProperty;
*/ */
public class ListItemStatus extends AbstractJsonMapping { public class ListItemStatus extends AbstractJsonMapping {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 101L;
@JsonProperty("id")
private String id;
@JsonProperty("status_code") @JsonProperty("status_code")
private int statusCode; private int statusCode;
@JsonProperty("item_present") @JsonProperty("item_present")
private boolean itemPresent; private boolean itemPresent;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getStatusCode() { public int getStatusCode() {
return statusCode; return statusCode;
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,14 +17,17 @@
* along with TheMovieDB API. If not;private see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not;private see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.model.list;
import com.omertron.themoviedbapi.model.StatusCode;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
public class MovieDbListStatus extends StatusCode { public class ListStatusCode extends StatusCode {
@JsonProperty("list_id") @JsonProperty("list_id")
private String listId; private String listId;
@JsonProperty("success")
private boolean success;
public String getListId() { public String getListId() {
return listId; return listId;
@@ -33,4 +36,13 @@ public class MovieDbListStatus extends StatusCode {
public void setListId(String listId) { public void setListId(String listId) {
this.listId = listId; this.listId = listId;
} }
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,102 +17,99 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.model.list;
import com.omertron.themoviedbapi.model.AbstractJsonMapping;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import java.io.Serializable;
/** /**
* @author Stuart * Wrapper for the MovieDbList function
*
* @author stuart.boston
*/ */
public class MovieList extends AbstractJsonMapping { public class UserList extends AbstractJsonMapping implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 100L;
/* @JsonProperty("id")
* Properties private String id;
*/
@JsonProperty("description") @JsonProperty("description")
private String description; private String description;
@JsonProperty("favorite_count") @JsonProperty("favorite_count")
private int favoriteCount; private int favoriteCount;
@JsonProperty("id")
private String id;
@JsonProperty("item_count") @JsonProperty("item_count")
private int itemCount; private int itemCount;
@JsonProperty("iso_639_1") @JsonProperty("iso_639_1")
private String language; private String language;
@JsonProperty("list_type")
private String listType;
@JsonProperty("name") @JsonProperty("name")
private String name; private String name;
@JsonProperty("poster_path") @JsonProperty("poster_path")
private String posterPath; private String posterPath;
@JsonProperty("list_type")
private String listType;
// <editor-fold defaultstate="collapsed" desc="Getter methods">
public String getDescription() {
return description;
}
public int getFavoriteCount() {
return favoriteCount;
}
public String getId() { public String getId() {
return id; return id;
} }
public int getItemCount() {
return itemCount;
}
public String getLanguage() {
return language;
}
public String getName() {
return name;
}
public String getPosterPath() {
return posterPath;
}
public String getListType() {
return listType;
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="Setter methods">
public void setDescription(String description) {
this.description = description;
}
public void setFavoriteCount(int favoriteCount) {
this.favoriteCount = favoriteCount;
}
public void setId(String id) { public void setId(String id) {
this.id = id; this.id = id;
} }
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getFavoriteCount() {
return favoriteCount;
}
public void setFavoriteCount(int favoriteCount) {
this.favoriteCount = favoriteCount;
}
public int getItemCount() {
return itemCount;
}
public void setItemCount(int itemCount) { public void setItemCount(int itemCount) {
this.itemCount = itemCount; this.itemCount = itemCount;
} }
public String getLanguage() {
return language;
}
public void setLanguage(String language) { public void setLanguage(String language) {
this.language = language; this.language = language;
} }
public void setName(String name) { public String getListType() {
this.name = name; return listType;
}
public void setPosterPath(String posterPath) {
this.posterPath = posterPath;
} }
public void setListType(String listType) { public void setListType(String listType) {
this.listType = listType; this.listType = listType;
} }
// </editor-fold>
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPosterPath() {
return posterPath;
}
public void setPosterPath(String posterPath) {
this.posterPath = posterPath;
}
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,28 +17,27 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.model.media;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import java.io.Serializable; import java.io.Serializable;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
/** /**
* @author Stuart * @author Stuart
*/ */
public class AlternativeTitle implements Serializable { public class AlternativeTitle implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 100L;
/*
* Properties
*/
@JsonProperty("iso_3166_1") @JsonProperty("iso_3166_1")
private String country; private String country;
@JsonProperty("title") @JsonProperty("title")
private String title; private String title;
@JsonProperty("type")
private String type;
// <editor-fold defaultstate="collapsed" desc="Getter methods">
public String getCountry() { public String getCountry() {
return country; return country;
} }
@@ -46,9 +45,7 @@ public class AlternativeTitle implements Serializable {
public String getTitle() { public String getTitle() {
return title; return title;
} }
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="Setter methods">
public void setCountry(String country) { public void setCountry(String country) {
this.country = country; this.country = country;
} }
@@ -56,31 +53,35 @@ public class AlternativeTitle implements Serializable {
public void setTitle(String title) { public void setTitle(String title) {
this.title = title; this.title = title;
} }
// </editor-fold>
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if (obj == null) { if (obj instanceof AlternativeTitle) {
final AlternativeTitle other = (AlternativeTitle) obj;
return new EqualsBuilder()
.append(country, other.country)
.append(title, other.title)
.append(type, other.type)
.isEquals();
} else {
return false; return false;
} }
if (getClass() != obj.getClass()) {
return false;
}
final AlternativeTitle other = (AlternativeTitle) obj;
if ((this.country == null) ? (other.country != null) : !this.country.equals(other.country)) {
return false;
}
if ((this.title == null) ? (other.title != null) : !this.title.equals(other.title)) {
return false;
}
return true;
} }
@Override @Override
public int hashCode() { public int hashCode() {
int hash = 7; return new HashCodeBuilder()
hash = 89 * hash + (this.country != null ? this.country.hashCode() : 0); .append(country)
hash = 89 * hash + (this.title != null ? this.title.hashCode() : 0); .append(title)
return hash; .append(type)
.toHashCode();
} }
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2013 Stuart Boston * Copyright (c) 2004-2016 Stuart Boston
* *
* This file is part of TheMovieDB API. * This file is part of TheMovieDB API.
* *
@@ -17,126 +17,99 @@
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>. * along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
package com.omertron.themoviedbapi.model; package com.omertron.themoviedbapi.model.media;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSetter;
import com.omertron.themoviedbapi.enumeration.MediaType;
import com.omertron.themoviedbapi.model.AbstractJsonMapping;
import com.omertron.themoviedbapi.interfaces.Identification;
import java.io.Serializable;
/** /**
* @author Stuart * Basic media information
*
* @author stuart.boston
*/ */
public class KeywordMovie extends AbstractJsonMapping { public class MediaBasic extends AbstractJsonMapping implements Serializable, Identification {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 100L;
/*
* Properties
*/
@JsonProperty("id") @JsonProperty("id")
private String id; private int id;
private MediaType mediaType;
@JsonProperty("backdrop_path") @JsonProperty("backdrop_path")
private String backdropPath; private String backdropPath;
@JsonProperty("original_title")
private String originalTitle;
@JsonProperty("release_date")
private String releaseDate;
@JsonProperty("poster_path") @JsonProperty("poster_path")
private String posterPath; private String posterPath;
@JsonProperty("title") @JsonProperty("popularity")
private String title; private float popularity;
@JsonProperty("vote_average") @JsonProperty("vote_average")
private float voteAverage; private float voteAverage;
@JsonProperty("vote_count") @JsonProperty("vote_count")
private double voteCount; private int voteCount;
@JsonProperty("adult")
private boolean adult;
@JsonProperty("popularity")
private float popularity;
// <editor-fold defaultstate="collapsed" desc="Getter methods"> @Override
public static long getSerialVersionUID() { public int getId() {
return serialVersionUID; return id;
}
@Override
public void setId(int id) {
this.id = id;
}
public MediaType getMediaType() {
return mediaType;
}
@JsonSetter("media_type")
public void setMediaType(String mediaType) {
this.mediaType = MediaType.fromString(mediaType);
}
public void setMediaType(MediaType mediaType) {
this.mediaType = mediaType;
} }
public String getBackdropPath() { public String getBackdropPath() {
return backdropPath; return backdropPath;
} }
public String getId() { public void setBackdropPath(String backdropPath) {
return id; this.backdropPath = backdropPath;
}
public String getOriginalTitle() {
return originalTitle;
}
public String getReleaseDate() {
return releaseDate;
} }
public String getPosterPath() { public String getPosterPath() {
return posterPath; return posterPath;
} }
public String getTitle() { public void setPosterPath(String posterPath) {
return title; this.posterPath = posterPath;
}
public float getPopularity() {
return popularity;
}
public void setPopularity(float popularity) {
this.popularity = popularity;
} }
public float getVoteAverage() { public float getVoteAverage() {
return voteAverage; return voteAverage;
} }
public double getVoteCount() {
return voteCount;
}
public boolean isAdult() {
return adult;
}
public float getPopularity() {
return popularity;
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="Setter methods">
public void setBackdropPath(String backdropPath) {
this.backdropPath = backdropPath;
}
public void setId(String id) {
this.id = id;
}
public void setOriginalTitle(String originalTitle) {
this.originalTitle = originalTitle;
}
public void setReleaseDate(String releaseDate) {
this.releaseDate = releaseDate;
}
public void setPosterPath(String posterPath) {
this.posterPath = posterPath;
}
public void setTitle(String title) {
this.title = title;
}
public void setVoteAverage(float voteAverage) { public void setVoteAverage(float voteAverage) {
this.voteAverage = voteAverage; this.voteAverage = voteAverage;
} }
public void setVoteCount(double voteCount) { public int getVoteCount() {
return voteCount;
}
public void setVoteCount(int voteCount) {
this.voteCount = voteCount; this.voteCount = voteCount;
} }
public void setAdult(boolean adult) {
this.adult = adult;
}
public void setPopularity(float popularity) {
this.popularity = popularity;
}
// </editor-fold>
} }
@@ -0,0 +1,81 @@
/*
* Copyright (c) 2004-2016 Stuart Boston
*
* This file is part of TheMovieDB API.
*
* TheMovieDB API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* TheMovieDB API is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.omertron.themoviedbapi.model.media;
import com.omertron.themoviedbapi.model.credits.MediaCreditCrew;
import com.omertron.themoviedbapi.model.credits.MediaCreditCast;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.omertron.themoviedbapi.interfaces.Identification;
import com.omertron.themoviedbapi.model.AbstractJsonMapping;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
/**
* @author stuart.boston
*/
public class MediaCreditList extends AbstractJsonMapping implements Serializable, Identification {
private static final long serialVersionUID = 100L;
@JsonProperty("id")
private int id = 0;
@JsonProperty("cast")
private List<MediaCreditCast> cast = Collections.emptyList();
@JsonProperty("guest_stars")
private List<MediaCreditCast> guestStars = Collections.emptyList();
@JsonProperty("crew")
private List<MediaCreditCrew> crew = Collections.emptyList();
@Override
public int getId() {
return id;
}
@Override
public void setId(int id) {
this.id = id;
}
public List<MediaCreditCast> getCast() {
return cast;
}
public void setCast(List<MediaCreditCast> cast) {
this.cast = cast;
}
public List<MediaCreditCrew> getCrew() {
return crew;
}
public void setCrew(List<MediaCreditCrew> crew) {
this.crew = crew;
}
public List<MediaCreditCast> getGuestStars() {
return guestStars;
}
public void setGuestStars(List<MediaCreditCast> guestStars) {
this.guestStars = guestStars;
}
}

Some files were not shown because too many files have changed in this diff Show More