merge master
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/e17dab4c Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/e17dab4c Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/e17dab4c Branch: refs/heads/master Commit: e17dab4c05f581b984f9e77e59d903fe0e482a1f Parents: f8614a6 91fa489 Author: Shawn Feldman <sfeld...@apache.org> Authored: Fri Oct 9 15:36:04 2015 -0600 Committer: Shawn Feldman <sfeld...@apache.org> Committed: Fri Oct 9 15:36:04 2015 -0600 ---------------------------------------------------------------------- README-Docs.md | 13 + README.md | 10 +- content/bootstrap/bootstrap.min.css | 9 + content/community/index.html | 22 +- content/css/bootflat-extensions.css | 356 + content/css/bootflat-square.css | 69 + content/css/bootflat.css | 1560 + content/css/font-awesome.min.css | 405 + content/css/usergrid-site.css | 1553 + .../docs/_sources/jersey2skeleton/README.txt | 9 + .../creating-and-managing-notifications.txt | 2 + .../docs/_sources/rest-endpoints/api-docs.txt | 653 +- content/docs/jersey2skeleton/README.html | 303 + .../creating-and-managing-notifications.html | 1 + content/docs/rest-endpoints/api-docs.html | 533 +- content/docs/searchindex.js | 2 +- content/favicon.ico | Bin 0 -> 3989 bytes content/font/FontAwesome.otf | Bin 0 -> 61896 bytes content/font/fontawesome-webfont-eot.eot | Bin 0 -> 37405 bytes content/font/fontawesome-webfont-svg.svg | 399 + content/font/fontawesome-webfont-ttf.ttf | Bin 0 -> 79076 bytes content/font/fontawesome-webfont-woff.woff | Bin 0 -> 43572 bytes content/img/alberto.jpg | Bin 0 -> 16137 bytes content/img/alex.png | Bin 0 -> 40842 bytes content/img/apache_usergrid_favicon.png | Bin 0 -> 10735 bytes content/img/apache_usergrid_logo_white.png | Bin 0 -> 26418 bytes .../img/apache_usergrid_logo_white_small.png | Bin 0 -> 11905 bytes content/img/check_flat/default.png | Bin 0 -> 25851 bytes content/img/dave.jpg | Bin 0 -> 14005 bytes content/img/ed.jpg | Bin 0 -> 20460 bytes content/img/egg-logo.png | Bin 0 -> 9938 bytes content/img/github.png | Bin 0 -> 8936 bytes content/img/grey.png | Bin 0 -> 37896 bytes content/img/intellij.png | Bin 0 -> 9199 bytes content/img/jeff.jpg | Bin 0 -> 13857 bytes content/img/michael_r.jpg | Bin 0 -> 10244 bytes content/img/mike_d.JPG | Bin 0 -> 36443 bytes content/img/nate.jpg | Bin 0 -> 4291 bytes content/img/rod.jpg | Bin 0 -> 40313 bytes content/img/scott.jpg | Bin 0 -> 8555 bytes content/img/shawn.jpg | Bin 0 -> 69304 bytes content/img/stliu.jpg | Bin 0 -> 51303 bytes content/img/strong.jpg | Bin 0 -> 7434 bytes content/img/structure101.png | Bin 0 -> 6475 bytes content/img/sungju.jpg | Bin 0 -> 11440 bytes content/img/tim.jpg | Bin 0 -> 7611 bytes content/img/todd.jpg | Bin 0 -> 18142 bytes content/img/usergrid-logo.pdf | 398 + content/img/usergrid.png | Bin 0 -> 21994 bytes content/img/usergrid_160.png | Bin 0 -> 2126 bytes content/img/usergrid_200.png | Bin 0 -> 6397 bytes content/img/usergrid_300.png | Bin 0 -> 16330 bytes content/img/usergrid_300_transparent.png | Bin 0 -> 16308 bytes content/img/usergrid_400.png | Bin 0 -> 8746 bytes content/img/usergrid_800.png | Bin 0 -> 14452 bytes content/img/usergrid_card.png | Bin 0 -> 23295 bytes content/img/usergrid_logo.png | Bin 0 -> 118086 bytes content/img/usergrid_logo_205_50.png | Bin 0 -> 7058 bytes content/img/usergrid_logo_260_50.png | Bin 0 -> 8682 bytes content/img/usergrid_logo_720.png | Bin 0 -> 27610 bytes content/img/usergrid_logo_720p.png | Bin 0 -> 27608 bytes content/img/usergrid_logo_900_200.png | Bin 0 -> 12273 bytes content/img/usergrid_logo_white.png | Bin 0 -> 16900 bytes content/img/usergrid_profile_128.png | Bin 0 -> 6689 bytes content/img/usergrid_profile_256.png | Bin 0 -> 10470 bytes content/img/usergrid_profile_256_white.png | Bin 0 -> 10724 bytes content/img/usergrid_profile_512_margins.png | Bin 0 -> 19112 bytes content/img/usergrid_profile_64_white.png | Bin 0 -> 4839 bytes content/img/usergrid_profile_background.png | Bin 0 -> 6710 bytes content/img/usergrid_screencast_bg.png | Bin 0 -> 20478 bytes content/img/usergrid_small_100.png | Bin 0 -> 6681 bytes content/img/usergrid_wiki.png | Bin 0 -> 7135 bytes content/img/yourkit.jpeg | Bin 0 -> 7763 bytes content/js/bootstrap.min.js | 8 + content/js/head.js | 708 + content/js/html5shiv.js | 8 + content/js/jquery-1.10.1.min.js | 6 + content/js/jquery.icheck.js | 397 + content/js/respond.min.js | 6 + content/js/usergrid-site.js | 50 + content/static/github-btn.html | 2 + content/v101-portal-demo/config.js | 129 + content/v101-portal-demo/css/entypo/entypo.eot | Bin 0 -> 35540 bytes content/v101-portal-demo/css/entypo/entypo.svg | 13 + content/v101-portal-demo/css/entypo/entypo.ttf | Bin 0 -> 35392 bytes content/v101-portal-demo/css/entypo/entypo.woff | Bin 0 -> 21916 bytes content/v101-portal-demo/css/main.css | 1990 + content/v101-portal-demo/css/main.min.css | 1 + content/v101-portal-demo/favicon.ico | Bin 0 -> 3989 bytes content/v101-portal-demo/helpJson.json | 47 + .../img/appswitcher/apiPlatform_lg.png | Bin 0 -> 2397 bytes .../img/appswitcher/appServices_lg.png | Bin 0 -> 2295 bytes .../img/appswitcher/console_lg.png | Bin 0 -> 1453 bytes .../img/appswitcher/home_lg.png | Bin 0 -> 1522 bytes .../img/appswitcher/logo_color.png | Bin 0 -> 3459 bytes .../v101-portal-demo/img/appswitcher/max_lg.png | Bin 0 -> 1970 bytes .../img/appswitcher/triangleMenuItem_right.png | Bin 0 -> 1158 bytes .../triangleMenuItem_right_hover.png | Bin 0 -> 1169 bytes content/v101-portal-demo/img/blue-bars.png | Bin 0 -> 3635 bytes content/v101-portal-demo/img/blue-bolt.png | Bin 0 -> 3942 bytes content/v101-portal-demo/img/blue-carat.png | Bin 0 -> 1006 bytes content/v101-portal-demo/img/green_dot.png | Bin 0 -> 3472 bytes .../img/introjs_arrow_step_next.png | Bin 0 -> 219 bytes .../img/introjs_arrow_step_next_disabled.png | Bin 0 -> 220 bytes .../img/introjs_arrow_step_prev.png | Bin 0 -> 217 bytes .../img/introjs_arrow_step_prev_disabled.png | Bin 0 -> 218 bytes content/v101-portal-demo/img/introjs_close.png | Bin 0 -> 274 bytes content/v101-portal-demo/img/logo.png | Bin 0 -> 7758 bytes content/v101-portal-demo/img/nav-device.gif | Bin 0 -> 2184 bytes content/v101-portal-demo/img/nav-sprites.png | Bin 0 -> 7953 bytes content/v101-portal-demo/img/no-data1.png | Bin 0 -> 45300 bytes content/v101-portal-demo/img/phone-small.gif | Bin 0 -> 1300 bytes .../img/push/APNS_cert_upload.png | Bin 0 -> 33956 bytes .../img/push/APNS_certification.png | Bin 0 -> 16855 bytes .../img/push/android-notification.png | Bin 0 -> 41629 bytes .../img/push/google_api_key.png | Bin 0 -> 98118 bytes .../img/push/iphone_message.png | Bin 0 -> 90307 bytes content/v101-portal-demo/img/push/step_1.png | Bin 0 -> 1953 bytes content/v101-portal-demo/img/push/step_2.png | Bin 0 -> 2117 bytes content/v101-portal-demo/img/push/step_3.png | Bin 0 -> 2162 bytes content/v101-portal-demo/img/red_dot.png | Bin 0 -> 3482 bytes .../v101-portal-demo/img/sdk-sprites-large.png | Bin 0 -> 15115 bytes content/v101-portal-demo/img/sdk-sprites.png | Bin 0 -> 4401 bytes content/v101-portal-demo/img/tablet-small.gif | Bin 0 -> 1390 bytes content/v101-portal-demo/img/user-photo.png | Bin 0 -> 3849 bytes content/v101-portal-demo/img/user_profile.png | Bin 0 -> 3775 bytes content/v101-portal-demo/img/verify.png | Bin 0 -> 22934 bytes content/v101-portal-demo/img/yellow_dot.png | Bin 0 -> 3475 bytes content/v101-portal-demo/index-debug.html | 151 + content/v101-portal-demo/index-template.html | 156 + content/v101-portal-demo/index.html | 151 + .../js/generated/usergrid-dev.js | 4886 + .../js/generated/usergrid-libs.min.js | 38 + .../js/generated/usergrid.min.js | 25 + content/v101-portal-demo/js/libs/MD5.min.js | 1 + .../js/libs/angular-1.2.5/angular-animate.js | 1323 + .../libs/angular-1.2.5/angular-animate.min.js | 23 + .../angular-1.2.5/angular-animate.min.js.map | 8 + .../js/libs/angular-1.2.5/angular-cookies.js | 202 + .../libs/angular-1.2.5/angular-cookies.min.js | 8 + .../angular-1.2.5/angular-cookies.min.js.map | 8 + .../js/libs/angular-1.2.5/angular-csp.css | 24 + .../js/libs/angular-1.2.5/angular-loader.js | 410 + .../js/libs/angular-1.2.5/angular-loader.min.js | 9 + .../angular-1.2.5/angular-loader.min.js.map | 8 + .../js/libs/angular-1.2.5/angular-mocks.js | 2116 + .../js/libs/angular-1.2.5/angular-resource.js | 565 + .../libs/angular-1.2.5/angular-resource.min.js | 13 + .../angular-1.2.5/angular-resource.min.js.map | 8 + .../js/libs/angular-1.2.5/angular-route.js | 911 + .../js/libs/angular-1.2.5/angular-route.min.js | 14 + .../libs/angular-1.2.5/angular-route.min.js.map | 8 + .../js/libs/angular-1.2.5/angular-sanitize.js | 622 + .../libs/angular-1.2.5/angular-sanitize.min.js | 14 + .../angular-1.2.5/angular-sanitize.min.js.map | 8 + .../js/libs/angular-1.2.5/angular-scenario.js | 32374 ++++++ .../js/libs/angular-1.2.5/angular-touch.js | 563 + .../js/libs/angular-1.2.5/angular-touch.min.js | 13 + .../libs/angular-1.2.5/angular-touch.min.js.map | 8 + .../js/libs/angular-1.2.5/angular.js | 20369 ++++ .../js/libs/angular-1.2.5/angular.min.js | 201 + .../js/libs/angular-1.2.5/angular.min.js.map | 8 + .../js/libs/angular-1.2.5/errors.json | 1 + .../js/libs/angular-1.2.5/version.json | 1 + .../js/libs/angular-1.2.5/version.txt | 1 + .../libs/bootstrap/css/bootstrap-responsive.css | 1345 + .../bootstrap/css/bootstrap-responsive.min.css | 1245 + .../js/libs/bootstrap/css/bootstrap.css | 6169 ++ .../js/libs/bootstrap/css/bootstrap.min.css | 5469 ++ .../js/libs/bootstrap/custom/css/bootstrap.css | 6316 ++ .../libs/bootstrap/custom/css/bootstrap.min.css | 9 + .../custom/img/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes .../custom/img/glyphicons-halflings.png | Bin 0 -> 12799 bytes .../js/libs/bootstrap/custom/js/bootstrap.js | 2291 + .../libs/bootstrap/custom/js/bootstrap.min.js | 7 + .../img/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes .../libs/bootstrap/img/glyphicons-halflings.png | Bin 0 -> 12799 bytes .../js/libs/bootstrap/js/bootstrap.js | 2117 + .../js/libs/bootstrap/js/bootstrap.min.js | 644 + .../v101-portal-demo/js/libs/google-viz-api.js | 49 + .../js/libs/jquery/jquery-1.9.1.min.js | 5 + .../js/libs/jquery/jquery-migrate-1.1.1.min.js | 3 + .../js/libs/jquery/jquery.sparkline.min.js | 5 + .../js/libs/jqueryui/date.min.js | 2 + .../ui-bg_diagonals-thick_90_eeeeee_40x40.png | Bin 0 -> 251 bytes .../images/ui-bg_flat_100_deedf7_40x100.png | Bin 0 -> 182 bytes .../images/ui-bg_flat_100_e4f1fb_40x100.png | Bin 0 -> 213 bytes .../images/ui-bg_flat_100_f2f5f7_40x100.png | Bin 0 -> 212 bytes .../images/ui-bg_flat_15_cd0a0a_40x100.png | Bin 0 -> 181 bytes .../images/ui-bg_flat_50_3baae3_40x100.png | Bin 0 -> 182 bytes .../images/ui-bg_flat_80_d7ebf9_40x100.png | Bin 0 -> 183 bytes .../ui-bg_highlight-hard_70_000000_1x100.png | Bin 0 -> 118 bytes .../ui-bg_highlight-soft_25_ffef8f_1x100.png | Bin 0 -> 153 bytes .../jqueryui/images/ui-icons_000000_256x240.png | Bin 0 -> 4369 bytes .../jqueryui/images/ui-icons_2694e8_256x240.png | Bin 0 -> 4369 bytes .../jqueryui/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../jqueryui/images/ui-icons_3d80b3_256x240.png | Bin 0 -> 4369 bytes .../jqueryui/images/ui-icons_72a7cf_256x240.png | Bin 0 -> 4369 bytes .../jqueryui/images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../js/libs/jqueryui/jquery-ui-1.8.18.min.js | 15 + .../js/libs/jqueryui/jquery-ui-1.8.9.custom.css | 1 + .../js/libs/jqueryui/jquery-ui-timepicker.css | 1 + .../libs/jqueryui/jquery.ui.timepicker.min.js | 1 + .../ui-bootstrap-custom-0.3.0.min.js | 1 + .../ui-bootstrap-custom-tpls-0.3.0.min.js | 1 + .../v101-portal-demo/js/libs/usergrid.sdk.js | 2568 + docs/jersey2skeleton/README.md | 9 + docs/jersey2skeleton/pom.xml | 387 + .../usergrid/testapp/AbstractResource.java | 51 + .../apache/usergrid/testapp/ApiResponse.java | 52 + .../org/apache/usergrid/testapp/Entity.java | 55 + .../usergrid/testapp/ManagementResource.java | 56 + .../usergrid/testapp/OrganizationResource.java | 64 + .../usergrid/testapp/OrganizationsResource.java | 76 + .../apache/usergrid/testapp/StatusResource.java | 34 + .../java/org/apache/usergrid/testapp/User.java | 28 + .../src/main/resources/applicationContext.xml | 28 + .../main/resources/jersey2skeleton-context.xml | 28 + .../src/main/webapp/WEB-INF/web.xml | 95 + .../usergrid/testapp/AvailablePortFinder.java | 208 + .../usergrid/testapp/OrganizationTest.java | 127 + .../org/apache/usergrid/testapp/TomcatMain.java | 57 + .../apache/usergrid/testapp/TomcatRuntime.java | 185 + .../src/test/resources/log4j.properties | 31 + .../src/test/resources/logging.properties | 26 + docs/jersey2skeleton/templates/markdown.hbs | 108 + docs/jersey2skeleton/templates/operation.hbs | 73 + docs/jersey2skeleton/templates/security.hbs | 88 + .../templates/strapdown.html.hbs | 10 + docs/rest-endpoints/api-docs.html | 750 +- docs/rest-endpoints/api-docs.md | 142 +- stack/build-tools/pom.xml | 2 +- stack/config/pom.xml | 2 +- stack/core/pom.xml | 14 +- .../corepersistence/CpEntityManager.java | 22 +- .../corepersistence/CpRelationManager.java | 21 +- .../asyncevents/EventBuilderImpl.java | 44 +- .../pipeline/read/search/CandidateIdFilter.java | 3 +- .../usergrid/persistence/EntityManager.java | 2 + .../usergrid/persistence/CollectionIT.java | 10 +- .../usergrid/persistence/PermissionsIT.java | 7 +- stack/corepersistence/collection/pom.xml | 2 +- stack/corepersistence/common/pom.xml | 2 +- stack/corepersistence/graph/pom.xml | 2 +- stack/corepersistence/map/pom.xml | 2 +- stack/corepersistence/model/pom.xml | 2 +- stack/corepersistence/pom.xml | 2 +- stack/corepersistence/queryindex/pom.xml | 2 +- .../index/impl/EsEntityIndexBatchImpl.java | 10 +- .../index/impl/EsIndexProducerImpl.java | 8 + .../persistence/index/impl/IndexProducer.java | 2 + .../index/impl/IndexRefreshCommandImpl.java | 2 +- .../persistence/index/impl/EntityIndexTest.java | 22 +- .../persistence/index/impl/GeoPagingTest.java | 6 +- stack/corepersistence/queue/pom.xml | 2 +- stack/pom.xml | 252 +- stack/rest/pom.xml | 141 +- .../usergrid/rest/AbstractContextResource.java | 45 +- .../usergrid/rest/ApplicationsResource.java | 178 - .../apache/usergrid/rest/DatabaseResource.java | 98 - .../org/apache/usergrid/rest/IndexResource.java | 54 +- .../apache/usergrid/rest/MigrateResource.java | 61 +- .../org/apache/usergrid/rest/RootResource.java | 92 +- .../apache/usergrid/rest/SwaggerServlet.java | 5 +- .../apache/usergrid/rest/SystemResource.java | 26 +- .../usergrid/rest/TextToJsonSwapWriter.java | 182 +- .../rest/applications/ApplicationResource.java | 30 +- .../rest/applications/ServiceResource.java | 111 +- .../applications/assets/AssetsResource.java | 13 +- .../applications/events/EventsResource.java | 36 +- .../notifiers/NotifierResource.java | 29 +- .../notifiers/NotifiersResource.java | 29 +- .../rest/applications/queues/QueueResource.java | 86 +- .../queues/QueueSubscriberResource.java | 63 +- .../queues/QueueSubscriptionResource.java | 63 +- .../queues/QueueTransactionsResource.java | 40 +- .../rest/applications/users/UserResource.java | 134 +- .../rest/applications/users/UsersResource.java | 51 +- .../exceptions/NotFoundExceptionMapper.java | 3 +- .../rest/exceptions/SecurityException.java | 31 +- .../exceptions/SecurityExceptionMapper.java | 3 +- .../exceptions/UnsupportedMediaTypeMapper.java | 43 + .../rest/filters/ContentTypeFilter.java | 74 +- .../rest/filters/JSONPCallbackFilter.java | 26 +- .../usergrid/rest/filters/MeteringFilter.java | 632 +- .../usergrid/rest/filters/TracingFilter.java | 37 +- .../rest/management/ManagementResource.java | 53 +- .../management/metrics/MetricsResource.java | 9 +- .../organizations/OrganizationResource.java | 64 +- .../organizations/OrganizationsResource.java | 66 +- .../applications/ApplicationResource.java | 56 +- .../applications/ApplicationsResource.java | 20 +- .../imports/FileErrorsResource.java | 41 +- .../imports/FileIncludesResource.java | 15 +- .../applications/imports/ImportsResource.java | 57 +- .../organizations/users/UsersResource.java | 88 +- .../rest/management/users/UserResource.java | 95 +- .../rest/management/users/UsersResource.java | 11 +- .../organizations/OrganizationsResource.java | 76 +- .../organizations/OrganizationResource.java | 28 +- .../rest/security/CrossOriginRequestFilter.java | 18 +- .../security/SecuredResourceFilterFactory.java | 181 +- .../ShiroAuthenticationExceptionMapper.java | 3 +- .../shiro/filters/BasicAuthSecurityFilter.java | 35 +- .../ClientCredentialsSecurityFilter.java | 25 +- .../OAuth2AccessTokenSecurityFilter.java | 168 +- .../security/shiro/filters/SecurityFilter.java | 33 +- .../rest/system/ApplicationsResource.java | 178 + .../usergrid/rest/system/DatabaseResource.java | 101 + .../rest/system/QueueSystemResource.java | 77 + .../apache/usergrid/rest/utils/CORSUtils.java | 42 +- stack/rest/src/main/webapp/WEB-INF/web.xml | 63 +- .../java/org/apache/usergrid/rest/BasicIT.java | 22 +- .../usergrid/rest/CollectionMetadataIT.java | 7 +- .../apache/usergrid/rest/IndexResourceIT.java | 43 +- .../apache/usergrid/rest/NotificationsIT.java | 6 +- .../apache/usergrid/rest/PartialUpdateTest.java | 16 +- .../apache/usergrid/rest/SystemResourceIT.java | 27 +- .../org/apache/usergrid/rest/TomcatRuntime.java | 12 +- .../rest/applications/ApplicationCreateIT.java | 14 +- .../rest/applications/ApplicationDeleteIT.java | 206 +- .../applications/ApplicationResourceIT.java | 266 +- .../applications/assets/AssetResourceIT.java | 21 +- .../applications/assets/AwsAssetResourceIT.java | 53 +- .../applications/assets/aws/NoAWSCredsRule.java | 15 +- .../collection/CollectionsResourceIT.java | 26 +- .../collection/DuplicateNameIT.java | 5 +- .../activities/ActivityResourceIT.java | 5 +- .../collection/devices/DevicesResourceIT.java | 4 +- .../collection/groups/GroupResourceIT.java | 34 +- .../collection/paging/PagingResourceIT.java | 65 +- .../users/ConnectionResourceTest.java | 12 +- .../collection/users/OwnershipResourceIT.java | 15 +- .../collection/users/PermissionsResourceIT.java | 34 +- .../collection/users/UserResourceIT.java | 126 +- .../queries/BadGrammarQueryTest.java | 15 +- .../applications/queries/BasicGeoTests.java | 45 +- .../rest/filters/ContentTypeResourceIT.java | 70 +- .../usergrid/rest/management/AccessTokenIT.java | 42 +- .../usergrid/rest/management/AdminUsersIT.java | 48 +- .../rest/management/ExportResourceIT.java | 137 +- .../rest/management/ImportResourceIT.java | 50 +- .../rest/management/ManagementResourceIT.java | 149 +- .../rest/management/OrganizationsIT.java | 60 +- .../rest/management/RegistrationIT.java | 32 +- .../organizations/AdminEmailEncodingIT.java | 5 +- .../rest/test/resource/AbstractRestIT.java | 79 +- .../rest/test/resource/ClientSetup.java | 4 +- .../usergrid/rest/test/resource/RestClient.java | 44 +- .../test/resource/TestPropertiesResource.java | 14 +- .../endpoints/ApplicationsResource.java | 8 +- .../resource/endpoints/BoostrapResource.java | 19 +- .../resource/endpoints/CollectionEndpoint.java | 109 +- .../test/resource/endpoints/EntityEndpoint.java | 40 +- .../test/resource/endpoints/NamedResource.java | 241 +- .../test/resource/endpoints/RootResource.java | 9 +- .../test/resource/endpoints/SetupResource.java | 20 +- .../test/resource/endpoints/SubResource.java | 37 + .../test/resource/endpoints/SystemResource.java | 51 +- .../test/resource/endpoints/TokenResource.java | 15 +- .../test/resource/endpoints/UrlResource.java | 11 +- .../endpoints/mgmt/ApplicationResource.java | 27 +- .../endpoints/mgmt/ApplicationsResource.java | 4 +- .../endpoints/mgmt/AuthorizeResource.java | 7 +- .../endpoints/mgmt/ConfirmResource.java | 12 +- .../endpoints/mgmt/CredentialsResource.java | 7 +- .../resource/endpoints/mgmt/FeedResource.java | 5 +- .../resource/endpoints/mgmt/OrgResource.java | 68 +- .../endpoints/mgmt/OrganizationResource.java | 15 +- .../endpoints/mgmt/PasswordResource.java | 8 - .../endpoints/mgmt/ReactivateResource.java | 10 +- .../resource/endpoints/mgmt/ResetResource.java | 10 +- .../resource/endpoints/mgmt/TokenResource.java | 7 +- .../resource/endpoints/mgmt/UserResource.java | 20 +- .../resource/endpoints/mgmt/UsersResource.java | 6 - stack/rest/src/test/resources/log4j.properties | 36 +- .../rest/src/test/resources/logging.properties | 13 +- stack/services/pom.xml | 51 +- .../security/providers/AbstractProvider.java | 16 +- .../security/providers/FacebookProvider.java | 7 +- .../security/providers/FoursquareProvider.java | 38 +- .../providers/PingIdentityProvider.java | 38 +- .../usergrid/services/roles/RolesService.java | 12 - .../usergrid/management/OrganizationIT.java | 18 +- stack/test-utils/pom.xml | 2 +- .../org/apache/usergrid/tools/ExportAdmins.java | 17 +- website/README.md | 3 +- website/Rules | 52 + website/build.sh | 1 + website/content/bootstrap/bootstrap.min.css | 9 + website/content/community/index.html | 22 +- website/content/css/bootflat-extensions.css | 356 + website/content/css/bootflat-square.css | 69 + website/content/css/bootflat.css | 1560 + website/content/css/font-awesome.min.css | 405 + website/content/css/usergrid-site.css | 1553 + website/content/favicon.ico | Bin 0 -> 3989 bytes website/content/font/FontAwesome.otf | Bin 0 -> 61896 bytes .../content/font/fontawesome-webfont-eot.eot | Bin 0 -> 37405 bytes .../content/font/fontawesome-webfont-svg.svg | 399 + .../content/font/fontawesome-webfont-ttf.ttf | Bin 0 -> 79076 bytes .../content/font/fontawesome-webfont-woff.woff | Bin 0 -> 43572 bytes website/content/img/alberto.jpg | Bin 0 -> 16137 bytes website/content/img/alex.png | Bin 0 -> 40842 bytes website/content/img/apache_usergrid_favicon.png | Bin 0 -> 10735 bytes .../content/img/apache_usergrid_logo_white.png | Bin 0 -> 26418 bytes .../img/apache_usergrid_logo_white_small.png | Bin 0 -> 11905 bytes website/content/img/check_flat/default.png | Bin 0 -> 25851 bytes website/content/img/dave.jpg | Bin 0 -> 14005 bytes website/content/img/ed.jpg | Bin 0 -> 20460 bytes website/content/img/egg-logo.png | Bin 0 -> 9938 bytes website/content/img/github.png | Bin 0 -> 8936 bytes website/content/img/grey.png | Bin 0 -> 37896 bytes website/content/img/intellij.png | Bin 0 -> 9199 bytes website/content/img/jeff.jpg | Bin 0 -> 13857 bytes website/content/img/michael_r.jpg | Bin 0 -> 10244 bytes website/content/img/mike_d.JPG | Bin 0 -> 36443 bytes website/content/img/nate.jpg | Bin 0 -> 4291 bytes website/content/img/rod.jpg | Bin 0 -> 40313 bytes website/content/img/scott.jpg | Bin 0 -> 8555 bytes website/content/img/shawn.jpg | Bin 0 -> 69304 bytes website/content/img/stliu.jpg | Bin 0 -> 51303 bytes website/content/img/strong.jpg | Bin 0 -> 7434 bytes website/content/img/structure101.png | Bin 0 -> 6475 bytes website/content/img/sungju.jpg | Bin 0 -> 11440 bytes website/content/img/tim.jpg | Bin 0 -> 7611 bytes website/content/img/todd.jpg | Bin 0 -> 18142 bytes website/content/img/usergrid-logo.pdf | 398 + website/content/img/usergrid.png | Bin 0 -> 21994 bytes website/content/img/usergrid_160.png | Bin 0 -> 2126 bytes website/content/img/usergrid_200.png | Bin 0 -> 6397 bytes website/content/img/usergrid_300.png | Bin 0 -> 16330 bytes .../content/img/usergrid_300_transparent.png | Bin 0 -> 16308 bytes website/content/img/usergrid_400.png | Bin 0 -> 8746 bytes website/content/img/usergrid_800.png | Bin 0 -> 14452 bytes website/content/img/usergrid_card.png | Bin 0 -> 23295 bytes website/content/img/usergrid_logo.png | Bin 0 -> 118086 bytes website/content/img/usergrid_logo_205_50.png | Bin 0 -> 7058 bytes website/content/img/usergrid_logo_260_50.png | Bin 0 -> 8682 bytes website/content/img/usergrid_logo_720.png | Bin 0 -> 27610 bytes website/content/img/usergrid_logo_720p.png | Bin 0 -> 27608 bytes website/content/img/usergrid_logo_900_200.png | Bin 0 -> 12273 bytes website/content/img/usergrid_logo_white.png | Bin 0 -> 16900 bytes website/content/img/usergrid_profile_128.png | Bin 0 -> 6689 bytes website/content/img/usergrid_profile_256.png | Bin 0 -> 10470 bytes .../content/img/usergrid_profile_256_white.png | Bin 0 -> 10724 bytes .../img/usergrid_profile_512_margins.png | Bin 0 -> 19112 bytes .../content/img/usergrid_profile_64_white.png | Bin 0 -> 4839 bytes .../content/img/usergrid_profile_background.png | Bin 0 -> 6710 bytes website/content/img/usergrid_screencast_bg.png | Bin 0 -> 20478 bytes website/content/img/usergrid_small_100.png | Bin 0 -> 6681 bytes website/content/img/usergrid_wiki.png | Bin 0 -> 7135 bytes website/content/img/yourkit.jpeg | Bin 0 -> 7763 bytes website/content/js/bootstrap.min.js | 8 + website/content/js/head.js | 708 + website/content/js/html5shiv.js | 8 + website/content/js/jquery-1.10.1.min.js | 6 + website/content/js/jquery.icheck.js | 397 + website/content/js/respond.min.js | 6 + website/content/js/usergrid-site.js | 50 + website/content/static/github-btn.html | 2 + website/crash.log | 143 + website/layouts/community.html | 1 + website/layouts/docs.html | 1 + website/lib/default.rb | 43 + website/lib/helpers_.rb | 0 website/lib/pandoc.template | 4 + website/nanoc.yaml | 77 + website/run.sh | 1 + website/tmp/checksums | 4 +- website/tmp/compiled_content | 87099 +---------------- website/tmp/dependencies | Bin 2372 -> 2397 bytes website/tmp/rule_memory | Bin 0 -> 5163 bytes website/utilities/map-markers.rb | 62 + website/utilities/markers.txt | 440 + website/utilities/snapshot-apigee.rb | 71 + website/utilities/usergrid.csv | 290 + 477 files changed, 117021 insertions(+), 90476 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/usergrid/blob/e17dab4c/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/usergrid/blob/e17dab4c/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java ---------------------------------------------------------------------- diff --cc stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java index aad7610,f1e6ad6..1bd5c7d --- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java +++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java @@@ -527,16 -525,11 +526,12 @@@ public class CpRelationManager implemen * */ - final EntityIndex ei = managerCache.getEntityIndex( applicationScope ); - final EntityIndexBatch batch = ei.createBatch(); - - // remove item from collection index - SearchEdge indexScope = createCollectionSearchEdge( cpHeadEntity.getId(), collectionName ); - batch.deindex( indexScope, memberEntity ); + //TODO: this should not happen here, needs to go to SQS + //indexProducer.put(batch).subscribe(); + indexService.queueEntityDelete(applicationScope,memberEntity.getId()); - managerCache.getIndexProducer().put( batch.build()).toBlocking().lastOrDefault(null); // this should throw an exception + // special handling for roles collection of a group if ( headEntity.getType().equals( Group.ENTITY_TYPE ) ) { http://git-wip-us.apache.org/repos/asf/usergrid/blob/e17dab4c/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/EventBuilderImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/usergrid/blob/e17dab4c/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/CandidateIdFilter.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/usergrid/blob/e17dab4c/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsIndexProducerImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/usergrid/blob/e17dab4c/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/IndexRefreshCommandImpl.java ---------------------------------------------------------------------- diff --cc stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/IndexRefreshCommandImpl.java index 6b8b024,087eefe..04f8652 --- a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/IndexRefreshCommandImpl.java +++ b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/IndexRefreshCommandImpl.java @@@ -67,7 -67,7 +67,7 @@@ public class IndexRefreshCommandImpl im final EsProvider esProvider, final IndexProducer producer, final IndexFig indexFig, -- final MetricsFactory metricsFactory, ++ l final MetricsFactory metricsFactory, final IndexCache indexCache ) { http://git-wip-us.apache.org/repos/asf/usergrid/blob/e17dab4c/stack/rest/src/main/java/org/apache/usergrid/rest/system/ApplicationsResource.java ---------------------------------------------------------------------- diff --cc stack/rest/src/main/java/org/apache/usergrid/rest/system/ApplicationsResource.java index 0000000,82bc4c8..55887c7 mode 000000,100644..100644 --- a/stack/rest/src/main/java/org/apache/usergrid/rest/system/ApplicationsResource.java +++ b/stack/rest/src/main/java/org/apache/usergrid/rest/system/ApplicationsResource.java @@@ -1,0 -1,168 +1,178 @@@ + /* + * + * * Licensed to the Apache Software Foundation (ASF) under one or more + * * contributor license agreements. The ASF licenses this file to You + * * under the Apache License, Version 2.0 (the "License"); you may not + * * use this file except in compliance with the License. + * * You may obtain a copy of the License at + * * + * * http://www.apache.org/licenses/LICENSE-2.0 + * * + * * Unless required by applicable law or agreed to in writing, software + * * distributed under the License is distributed on an "AS IS" BASIS, + * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * * See the License for the specific language governing permissions and + * * limitations under the License. For additional information regarding + * * copyright in this work, please see the NOTICE file in the top level + * * directory of this distribution. + * + */ + package org.apache.usergrid.rest.system; + + import com.fasterxml.jackson.jaxrs.json.annotation.JSONP; + import org.apache.usergrid.corepersistence.service.StatusService; + import org.apache.usergrid.persistence.EntityManager; + import org.apache.usergrid.persistence.model.util.UUIDGenerator; + import org.apache.usergrid.rest.AbstractContextResource; + import org.apache.usergrid.rest.ApiResponse; + import org.apache.usergrid.rest.security.annotations.RequireSystemAccess; + import org.slf4j.Logger; + import org.slf4j.LoggerFactory; + import org.springframework.context.annotation.Scope; + import org.springframework.stereotype.Component; + + import javax.ws.rs.*; + import javax.ws.rs.core.Context; + import javax.ws.rs.core.MediaType; + import javax.ws.rs.core.UriInfo; + import java.util.HashMap; + import java.util.LinkedHashMap; + import java.util.Map; + import java.util.UUID; + import java.util.concurrent.atomic.AtomicInteger; + + /** + * Classy class class. + */ + @Component + @Scope( "singleton" ) + @Produces( { + MediaType.APPLICATION_JSON, "application/javascript", "application/x-javascript", "text/ecmascript", + "application/ecmascript", "text/jscript" + } ) + public class ApplicationsResource extends AbstractContextResource { + + private static final Logger logger = LoggerFactory.getLogger(ApplicationsResource.class); + + + public ApplicationsResource() { + logger.info( "ApplicationsResource initialized" ); + } + + @RequireSystemAccess + @DELETE + @JSONP + @Path( "{applicationId}" ) + public ApiResponse clearApplication( + @Context UriInfo ui, + @PathParam("applicationId") UUID applicationId, + @QueryParam( "confirmApplicationName" ) String confirmApplicationName, + @QueryParam( "limit" ) int limit, + @QueryParam( "callback" ) @DefaultValue( "callback" ) String callback ) + + throws Exception { + + if(confirmApplicationName == null){ + throw new IllegalArgumentException("please make add a QueryString for confirmApplicationName"); + } + + final UUID jobId = UUIDGenerator.newTimeUUID(); + + final EntityManager em = emf.getEntityManager(applicationId); + final String name = em.getApplication().getApplicationName(); + if(!name.toLowerCase().equals(confirmApplicationName.toLowerCase())){ + throw new IllegalArgumentException( + "confirmApplicationName: " + confirmApplicationName + " does not equal " + name); + } + final StatusService statusService = injector.getInstance(StatusService.class); + + final ApiResponse response = createApiResponse(); + + response.setAction( "clear application" ); + + logger.info("clearing up application"); + + final Thread delete = new Thread() { + + @Override + public void run() { + final AtomicInteger itemsDeleted = new AtomicInteger(0); + try { + management.deleteAllEntities(applicationId, limit) + .map(id -> itemsDeleted.incrementAndGet()) + .doOnNext(count -> { + if( count % 100 == 0 ){ + Map<String,Object> map = new LinkedHashMap<>(); + map.put("count",itemsDeleted.intValue()); + final StatusService statusService = injector.getInstance(StatusService.class); - statusService.setStatus(applicationId, jobId, StatusService.Status.INPROGRESS,map).subscribe(); ++ statusService.setStatus(applicationId, jobId, StatusService.Status.INPROGRESS,map) ++ .subscribe();//do not want to throw this exception + } + }) - .doOnCompleted(() ->{ - Map<String,Object> map = new LinkedHashMap<>(); - map.put("count",itemsDeleted.intValue()); ++ .doOnCompleted(() -> { ++ Map<String, Object> map = new LinkedHashMap<>(); ++ map.put("count", itemsDeleted.intValue()); + final StatusService statusService = injector.getInstance(StatusService.class); - statusService.setStatus(applicationId,jobId, StatusService.Status.COMPLETE,map).subscribe(); ++ statusService.setStatus(applicationId, jobId, StatusService.Status.COMPLETE, map) ++ .toBlocking().lastOrDefault(null);//want to rethrow this exception + }) - .subscribe(); ++ .toBlocking().lastOrDefault(null);//expecting exception to be caught if job fails + + } catch ( Exception e ) { + Map<String,Object> map = new LinkedHashMap<>(); + map.put("exception",e); - statusService.setStatus(applicationId,jobId, StatusService.Status.FAILED,map).subscribe(); ++ try { ++ statusService.setStatus(applicationId, jobId, StatusService.Status.FAILED, map).toBlocking().lastOrDefault(null);//leave as subscribe if fails retry ++ }catch (Exception subE){ ++ logger.error("failed to update status "+jobId,subE); ++ } + logger.error( "Failed to delete appid:"+applicationId + " jobid:"+jobId+" count:"+itemsDeleted, e ); + } + } + }; + + delete.setName("Delete for app : " + applicationId + " job: " + jobId); + delete.setDaemon(true); + delete.start(); + - statusService.setStatus(applicationId,jobId, StatusService.Status.STARTED,new LinkedHashMap<>()).subscribe(); - ++ try { ++ //should throw exception if can't start ++ statusService.setStatus(applicationId, jobId, StatusService.Status.STARTED, new LinkedHashMap<>()).toBlocking().lastOrDefault(null); ++ }catch (Exception e){ ++ logger.error("failed to set status for " + jobId, e); ++ } + Map<String,Object> data = new HashMap<>(); + data.put("jobId",jobId); + data.put("status",StatusService.Status.STARTED); + response.setData(data); + response.setSuccess(); + return response; + } + + @RequireSystemAccess + @GET + @Path( "{applicationId}/job/{jobId}" ) + public ApiResponse getStatus( + @Context UriInfo ui, + @PathParam("applicationId") UUID applicationId, + @PathParam("jobId") UUID jobId, + @QueryParam( "callback" ) @DefaultValue( "callback" ) String callback ) throws Exception{ + + final StatusService statusService = injector.getInstance(StatusService.class); + + final ApiResponse response = createApiResponse(); + + response.setAction( "clear application" ); + + StatusService.JobStatus jobStatus = statusService.getStatus(applicationId, jobId).toBlocking().lastOrDefault(null); + + Map<String,Object> data = new HashMap<>(); + data.put("jobId",jobId); + data.put( "status", jobStatus.getStatus().toString() ); + data.put( "metadata", jobStatus.getData() ); + response.setData(data); + response.setSuccess(); + return response; + } + + }