├── .gitignore ├── LICENSE ├── Readme.md ├── backend-v1 ├── Readme.md ├── build-docker.sh ├── pom.xml ├── push-docker.sh └── src │ ├── main │ ├── assembly │ │ └── assembly.xml │ ├── fabric8 │ │ └── deployment.yml │ ├── java │ │ └── org │ │ │ └── jboss │ │ │ └── examples │ │ │ └── ticketmonster │ │ │ ├── model │ │ │ ├── Address.java │ │ │ ├── Booking.java │ │ │ ├── Event.java │ │ │ ├── EventCategory.java │ │ │ ├── MediaItem.java │ │ │ ├── MediaType.java │ │ │ ├── Performance.java │ │ │ ├── Seat.java │ │ │ ├── SeatAllocationException.java │ │ │ ├── Section.java │ │ │ ├── SectionAllocation.java │ │ │ ├── Show.java │ │ │ ├── Ticket.java │ │ │ ├── TicketCategory.java │ │ │ ├── TicketPrice.java │ │ │ └── Venue.java │ │ │ ├── rest │ │ │ ├── BaseEntityService.java │ │ │ ├── BookingEndpoint.java │ │ │ ├── BookingRequest.java │ │ │ ├── BookingService.java │ │ │ ├── BotState.java │ │ │ ├── BotStatusService.java │ │ │ ├── EventCategoryEndpoint.java │ │ │ ├── EventEndpoint.java │ │ │ ├── EventService.java │ │ │ ├── JaxRsActivator.java │ │ │ ├── MediaItemEndpoint.java │ │ │ ├── MediaService.java │ │ │ ├── MetricsService.java │ │ │ ├── PerformanceEndpoint.java │ │ │ ├── PerformanceMetric.java │ │ │ ├── PingService.java │ │ │ ├── ReaderExceptionMapper.java │ │ │ ├── RestServiceException.java │ │ │ ├── SectionAllocationEndpoint.java │ │ │ ├── SectionComparator.java │ │ │ ├── SectionEndpoint.java │ │ │ ├── ShowEndpoint.java │ │ │ ├── ShowMetric.java │ │ │ ├── ShowService.java │ │ │ ├── TicketCategoryEndpoint.java │ │ │ ├── TicketEndpoint.java │ │ │ ├── TicketPriceEndpoint.java │ │ │ ├── TicketRequest.java │ │ │ ├── VenueEndpoint.java │ │ │ ├── VenueService.java │ │ │ └── dto │ │ │ │ ├── AddressDTO.java │ │ │ │ ├── BookingDTO.java │ │ │ │ ├── EventCategoryDTO.java │ │ │ │ ├── EventDTO.java │ │ │ │ ├── MediaItemDTO.java │ │ │ │ ├── NestedEventCategoryDTO.java │ │ │ │ ├── NestedEventDTO.java │ │ │ │ ├── NestedMediaItemDTO.java │ │ │ │ ├── NestedPerformanceDTO.java │ │ │ │ ├── NestedSectionDTO.java │ │ │ │ ├── NestedShowDTO.java │ │ │ │ ├── NestedTicketCategoryDTO.java │ │ │ │ ├── NestedTicketDTO.java │ │ │ │ ├── NestedTicketPriceDTO.java │ │ │ │ ├── NestedVenueDTO.java │ │ │ │ ├── PerformanceDTO.java │ │ │ │ ├── SeatDTO.java │ │ │ │ ├── SectionAllocationDTO.java │ │ │ │ ├── SectionDTO.java │ │ │ │ ├── ShowDTO.java │ │ │ │ ├── TicketCategoryDTO.java │ │ │ │ ├── TicketDTO.java │ │ │ │ ├── TicketPriceDTO.java │ │ │ │ └── VenueDTO.java │ │ │ ├── service │ │ │ ├── AllocatedSeats.java │ │ │ ├── Bot.java │ │ │ ├── BotService.java │ │ │ ├── MediaManager.java │ │ │ ├── MediaPath.java │ │ │ └── SeatAllocationService.java │ │ │ └── util │ │ │ ├── Base64.java │ │ │ ├── CircularBuffer.java │ │ │ ├── ForwardingMap.java │ │ │ ├── Reflections.java │ │ │ ├── Resources.java │ │ │ └── qualifier │ │ │ ├── BotMessage.java │ │ │ ├── Cancelled.java │ │ │ └── Created.java │ ├── resources-mysql │ │ └── META-INF │ │ │ └── persistence.xml │ ├── resources-postgresql │ │ └── META-INF │ │ │ └── persistence.xml │ ├── resources │ │ ├── META-INF │ │ │ └── persistence.xml │ │ ├── import.sql │ │ ├── log4j.properties │ │ └── not_available.jpg │ ├── webapp │ │ └── WEB-INF │ │ │ ├── beans.xml │ │ │ ├── jboss-deployment-structure.xml │ │ │ ├── ticket-monster-ds.xml │ │ │ └── web.xml │ └── wf-standalone │ │ ├── module │ │ ├── module.xml │ │ └── mysql-connector-java-5.1.38.jar │ │ └── standalone.xml │ └── test │ ├── java │ └── org │ │ └── jboss │ │ └── examples │ │ └── ticketmonster │ │ └── test │ │ ├── TicketMonsterDeployment.java │ │ └── rest │ │ ├── BookingServiceTest.java │ │ ├── EventServiceTest.java │ │ ├── RESTDeployment.java │ │ ├── ShowServiceTest.java │ │ └── VenueServiceTest.java │ └── resources │ ├── META-INF │ └── test-persistence.xml │ ├── arquillian.xml │ └── test-ds.xml ├── backend-v2 ├── Readme.md ├── build-docker.sh ├── pom.xml ├── push-docker.sh └── src │ ├── main │ ├── assembly │ │ └── assembly.xml │ ├── fabric8 │ │ └── deployment.yml │ ├── java │ │ └── org │ │ │ └── jboss │ │ │ └── examples │ │ │ └── ticketmonster │ │ │ ├── model │ │ │ ├── Address.java │ │ │ ├── Booking.java │ │ │ ├── Event.java │ │ │ ├── EventCategory.java │ │ │ ├── MediaItem.java │ │ │ ├── MediaType.java │ │ │ ├── Performance.java │ │ │ ├── Seat.java │ │ │ ├── SeatAllocationException.java │ │ │ ├── Section.java │ │ │ ├── SectionAllocation.java │ │ │ ├── Show.java │ │ │ ├── Ticket.java │ │ │ ├── TicketCategory.java │ │ │ ├── TicketPrice.java │ │ │ └── Venue.java │ │ │ ├── orders │ │ │ └── OrdersRequestDTO.java │ │ │ ├── rest │ │ │ ├── BaseEntityService.java │ │ │ ├── BookingEndpoint.java │ │ │ ├── BookingRequest.java │ │ │ ├── BookingService.java │ │ │ ├── BotState.java │ │ │ ├── BotStatusService.java │ │ │ ├── EventCategoryEndpoint.java │ │ │ ├── EventEndpoint.java │ │ │ ├── EventService.java │ │ │ ├── JaxRsActivator.java │ │ │ ├── MediaItemEndpoint.java │ │ │ ├── MediaService.java │ │ │ ├── MetricsService.java │ │ │ ├── PerformanceEndpoint.java │ │ │ ├── PerformanceMetric.java │ │ │ ├── PingService.java │ │ │ ├── ReaderExceptionMapper.java │ │ │ ├── RestServiceException.java │ │ │ ├── SectionAllocationEndpoint.java │ │ │ ├── SectionComparator.java │ │ │ ├── SectionEndpoint.java │ │ │ ├── ShowEndpoint.java │ │ │ ├── ShowMetric.java │ │ │ ├── ShowService.java │ │ │ ├── TicketCategoryEndpoint.java │ │ │ ├── TicketEndpoint.java │ │ │ ├── TicketPriceEndpoint.java │ │ │ ├── TicketRequest.java │ │ │ ├── VenueEndpoint.java │ │ │ ├── VenueService.java │ │ │ └── dto │ │ │ │ ├── AddressDTO.java │ │ │ │ ├── BookingDTO.java │ │ │ │ ├── EventCategoryDTO.java │ │ │ │ ├── EventDTO.java │ │ │ │ ├── MediaItemDTO.java │ │ │ │ ├── NestedEventCategoryDTO.java │ │ │ │ ├── NestedEventDTO.java │ │ │ │ ├── NestedMediaItemDTO.java │ │ │ │ ├── NestedPerformanceDTO.java │ │ │ │ ├── NestedSectionDTO.java │ │ │ │ ├── NestedShowDTO.java │ │ │ │ ├── NestedTicketCategoryDTO.java │ │ │ │ ├── NestedTicketDTO.java │ │ │ │ ├── NestedTicketPriceDTO.java │ │ │ │ ├── NestedVenueDTO.java │ │ │ │ ├── PerformanceDTO.java │ │ │ │ ├── SeatDTO.java │ │ │ │ ├── SectionAllocationDTO.java │ │ │ │ ├── SectionDTO.java │ │ │ │ ├── ShowDTO.java │ │ │ │ ├── TicketCategoryDTO.java │ │ │ │ ├── TicketDTO.java │ │ │ │ ├── TicketPriceDTO.java │ │ │ │ └── VenueDTO.java │ │ │ ├── service │ │ │ ├── AllocatedSeats.java │ │ │ ├── Bot.java │ │ │ ├── BotService.java │ │ │ ├── MediaManager.java │ │ │ ├── MediaPath.java │ │ │ └── SeatAllocationService.java │ │ │ ├── servlet │ │ │ └── FF4jConsoleServlet.java │ │ │ └── util │ │ │ ├── Base64.java │ │ │ ├── CircularBuffer.java │ │ │ ├── FF4jFactory.java │ │ │ ├── ForwardingMap.java │ │ │ ├── Reflections.java │ │ │ ├── Resources.java │ │ │ └── qualifier │ │ │ ├── BotMessage.java │ │ │ ├── Cancelled.java │ │ │ └── Created.java │ ├── resources-mysql │ │ └── META-INF │ │ │ └── persistence.xml │ ├── resources-postgresql │ │ └── META-INF │ │ │ └── persistence.xml │ ├── resources │ │ ├── META-INF │ │ │ └── persistence.xml │ │ ├── ff4j.xml │ │ ├── import.sql │ │ ├── log4j.properties │ │ └── not_available.jpg │ ├── webapp │ │ └── WEB-INF │ │ │ ├── beans.xml │ │ │ ├── jboss-deployment-structure.xml │ │ │ ├── ticket-monster-ds.xml │ │ │ └── web.xml │ └── wf-standalone │ │ ├── module │ │ ├── module.xml │ │ └── mysql-connector-java-5.1.38.jar │ │ └── standalone.xml │ └── test │ ├── java │ └── org │ │ └── jboss │ │ └── examples │ │ └── ticketmonster │ │ └── test │ │ ├── TicketMonsterDeployment.java │ │ ├── rest │ │ ├── BookingServiceTest.java │ │ ├── EventServiceTest.java │ │ ├── ExternalBookingContractTest.java │ │ ├── ExternalBookingOrdersServiceTest.java │ │ ├── RESTDeployment.java │ │ ├── ShowServiceTest.java │ │ └── VenueServiceTest.java │ │ └── utils │ │ └── BookingUtils.java │ └── resources │ ├── META-INF │ └── test-persistence.xml │ ├── arquillian.xml │ ├── hoverfly │ └── simulation.json │ └── test-ds.xml ├── deployment └── kubernetes │ ├── core │ ├── backend │ │ ├── backend-svc.yml │ │ ├── v1 │ │ │ ├── backend-v1-deployment.yml │ │ │ └── backend-v1-svc.yml │ │ └── v2 │ │ │ ├── backend-v2-deployment.yml │ │ │ └── backend-v2-svc.yml │ ├── frontend │ │ ├── talk-to-backend │ │ │ └── tm-ui-deployment.yml │ │ ├── talk-to-monolith │ │ │ └── tm-ui-deployment.yml │ │ ├── ticket-monster-ingress.yml │ │ └── tm-ui-svc.yml │ ├── monolith │ │ ├── mysql-deployment.yml │ │ ├── mysql-svc.yml │ │ ├── ticket-monster-deployment.yml │ │ ├── ticket-monster-ingress.yml │ │ ├── ticket-monster-svc.yml │ │ └── tm-ui-svc.yml │ └── orders │ │ ├── mysql-deployment.yml │ │ ├── mysql-svc.yml │ │ ├── orders-mysql-configmap.yml │ │ ├── orders-service-deployment.yml │ │ └── orders-service-svc.yml │ ├── demo │ ├── cleanup.sh │ ├── demo.sh │ └── util.sh │ ├── fabric8 │ ├── expose-controller.md │ └── fabric8-expose-controller.yml │ └── istio │ ├── README.md │ ├── get-urls.sh │ ├── install.sh │ └── route-rules │ ├── route-tm-1pct-v2.yaml │ ├── route-tm-v1.yaml │ ├── route-tm-v2-dark-launch.yaml │ └── route-tm-v2.yaml ├── monolith ├── README.md ├── build-docker.sh ├── pom.xml ├── push-docker.sh └── src │ ├── main │ ├── assembly │ │ └── assembly.xml │ ├── java │ │ └── org │ │ │ └── jboss │ │ │ └── examples │ │ │ └── ticketmonster │ │ │ ├── model │ │ │ ├── Address.java │ │ │ ├── Booking.java │ │ │ ├── Event.java │ │ │ ├── EventCategory.java │ │ │ ├── MediaItem.java │ │ │ ├── MediaType.java │ │ │ ├── Performance.java │ │ │ ├── Seat.java │ │ │ ├── SeatAllocationException.java │ │ │ ├── Section.java │ │ │ ├── SectionAllocation.java │ │ │ ├── Show.java │ │ │ ├── Ticket.java │ │ │ ├── TicketCategory.java │ │ │ ├── TicketPrice.java │ │ │ └── Venue.java │ │ │ ├── rest │ │ │ ├── BaseEntityService.java │ │ │ ├── BookingEndpoint.java │ │ │ ├── BookingRequest.java │ │ │ ├── BookingService.java │ │ │ ├── BotState.java │ │ │ ├── BotStatusService.java │ │ │ ├── EventCategoryEndpoint.java │ │ │ ├── EventEndpoint.java │ │ │ ├── EventService.java │ │ │ ├── JaxRsActivator.java │ │ │ ├── MediaItemEndpoint.java │ │ │ ├── MediaService.java │ │ │ ├── MetricsService.java │ │ │ ├── PerformanceEndpoint.java │ │ │ ├── PerformanceMetric.java │ │ │ ├── ReaderExceptionMapper.java │ │ │ ├── RestServiceException.java │ │ │ ├── SectionAllocationEndpoint.java │ │ │ ├── SectionComparator.java │ │ │ ├── SectionEndpoint.java │ │ │ ├── ShowEndpoint.java │ │ │ ├── ShowMetric.java │ │ │ ├── ShowService.java │ │ │ ├── TicketCategoryEndpoint.java │ │ │ ├── TicketEndpoint.java │ │ │ ├── TicketPriceEndpoint.java │ │ │ ├── TicketRequest.java │ │ │ ├── VenueEndpoint.java │ │ │ ├── VenueService.java │ │ │ └── dto │ │ │ │ ├── AddressDTO.java │ │ │ │ ├── BookingDTO.java │ │ │ │ ├── EventCategoryDTO.java │ │ │ │ ├── EventDTO.java │ │ │ │ ├── MediaItemDTO.java │ │ │ │ ├── NestedEventCategoryDTO.java │ │ │ │ ├── NestedEventDTO.java │ │ │ │ ├── NestedMediaItemDTO.java │ │ │ │ ├── NestedPerformanceDTO.java │ │ │ │ ├── NestedSectionDTO.java │ │ │ │ ├── NestedShowDTO.java │ │ │ │ ├── NestedTicketCategoryDTO.java │ │ │ │ ├── NestedTicketDTO.java │ │ │ │ ├── NestedTicketPriceDTO.java │ │ │ │ ├── NestedVenueDTO.java │ │ │ │ ├── PerformanceDTO.java │ │ │ │ ├── SeatDTO.java │ │ │ │ ├── SectionAllocationDTO.java │ │ │ │ ├── SectionDTO.java │ │ │ │ ├── ShowDTO.java │ │ │ │ ├── TicketCategoryDTO.java │ │ │ │ ├── TicketDTO.java │ │ │ │ ├── TicketPriceDTO.java │ │ │ │ └── VenueDTO.java │ │ │ ├── service │ │ │ ├── AllocatedSeats.java │ │ │ ├── Bot.java │ │ │ ├── BotService.java │ │ │ ├── MediaManager.java │ │ │ ├── MediaPath.java │ │ │ └── SeatAllocationService.java │ │ │ └── util │ │ │ ├── Base64.java │ │ │ ├── CircularBuffer.java │ │ │ ├── ForwardingMap.java │ │ │ ├── Reflections.java │ │ │ ├── Resources.java │ │ │ └── qualifier │ │ │ ├── BotMessage.java │ │ │ ├── Cancelled.java │ │ │ └── Created.java │ ├── resources-mysql │ │ └── META-INF │ │ │ └── persistence.xml │ ├── resources-postgresql │ │ └── META-INF │ │ │ └── persistence.xml │ ├── resources │ │ ├── META-INF │ │ │ └── persistence.xml │ │ ├── import.sql │ │ ├── log4j.properties │ │ └── not_available.jpg │ ├── webapp │ │ ├── WEB-INF │ │ │ ├── beans.xml │ │ │ ├── jboss-deployment-structure.xml │ │ │ ├── ticket-monster-ds.xml │ │ │ └── web.xml │ │ ├── admin │ │ │ ├── app.html │ │ │ ├── fonts │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ ├── img │ │ │ │ └── forge-logo.png │ │ │ ├── index.html │ │ │ ├── scripts │ │ │ │ ├── app.js │ │ │ │ ├── controllers │ │ │ │ │ ├── editBookingController.js │ │ │ │ │ ├── editEventCategoryController.js │ │ │ │ │ ├── editEventController.js │ │ │ │ │ ├── editMediaItemController.js │ │ │ │ │ ├── editPerformanceController.js │ │ │ │ │ ├── editSectionAllocationController.js │ │ │ │ │ ├── editSectionController.js │ │ │ │ │ ├── editShowController.js │ │ │ │ │ ├── editTicketCategoryController.js │ │ │ │ │ ├── editTicketController.js │ │ │ │ │ ├── editTicketPriceController.js │ │ │ │ │ ├── editVenueController.js │ │ │ │ │ ├── flashController.js │ │ │ │ │ ├── newBookingController.js │ │ │ │ │ ├── newEventCategoryController.js │ │ │ │ │ ├── newEventController.js │ │ │ │ │ ├── newMediaItemController.js │ │ │ │ │ ├── newPerformanceController.js │ │ │ │ │ ├── newSectionAllocationController.js │ │ │ │ │ ├── newSectionController.js │ │ │ │ │ ├── newShowController.js │ │ │ │ │ ├── newTicketCategoryController.js │ │ │ │ │ ├── newTicketController.js │ │ │ │ │ ├── newTicketPriceController.js │ │ │ │ │ ├── newVenueController.js │ │ │ │ │ ├── searchBookingController.js │ │ │ │ │ ├── searchEventCategoryController.js │ │ │ │ │ ├── searchEventController.js │ │ │ │ │ ├── searchMediaItemController.js │ │ │ │ │ ├── searchPerformanceController.js │ │ │ │ │ ├── searchSectionAllocationController.js │ │ │ │ │ ├── searchSectionController.js │ │ │ │ │ ├── searchShowController.js │ │ │ │ │ ├── searchTicketCategoryController.js │ │ │ │ │ ├── searchTicketController.js │ │ │ │ │ ├── searchTicketPriceController.js │ │ │ │ │ └── searchVenueController.js │ │ │ │ ├── directives │ │ │ │ │ ├── datepicker.js │ │ │ │ │ ├── datetimepicker.js │ │ │ │ │ └── timepicker.js │ │ │ │ ├── filters │ │ │ │ │ ├── genericSearchFilter.js │ │ │ │ │ └── startFromFilter.js │ │ │ │ ├── offcanvas.js │ │ │ │ ├── services │ │ │ │ │ ├── BookingFactory.js │ │ │ │ │ ├── EventCategoryFactory.js │ │ │ │ │ ├── EventFactory.js │ │ │ │ │ ├── MediaItemFactory.js │ │ │ │ │ ├── PerformanceFactory.js │ │ │ │ │ ├── SectionAllocationFactory.js │ │ │ │ │ ├── SectionFactory.js │ │ │ │ │ ├── ShowFactory.js │ │ │ │ │ ├── TicketCategoryFactory.js │ │ │ │ │ ├── TicketFactory.js │ │ │ │ │ ├── TicketPriceFactory.js │ │ │ │ │ ├── VenueFactory.js │ │ │ │ │ ├── flash.js │ │ │ │ │ └── locationParser.js │ │ │ │ └── vendor │ │ │ │ │ ├── angular-resource.js │ │ │ │ │ ├── angular-route.js │ │ │ │ │ ├── angular.js │ │ │ │ │ ├── bootstrap.js │ │ │ │ │ ├── jquery-2.1.1.js │ │ │ │ │ └── modernizr-2.8.3.min.js │ │ │ ├── styles │ │ │ │ ├── bootstrap-theme.css │ │ │ │ ├── bootstrap.css │ │ │ │ ├── custom-forge.css │ │ │ │ └── main.css │ │ │ └── views │ │ │ │ ├── Booking │ │ │ │ ├── detail.html │ │ │ │ └── search.html │ │ │ │ ├── Event │ │ │ │ ├── detail.html │ │ │ │ └── search.html │ │ │ │ ├── EventCategory │ │ │ │ ├── detail.html │ │ │ │ └── search.html │ │ │ │ ├── MediaItem │ │ │ │ ├── detail.html │ │ │ │ └── search.html │ │ │ │ ├── Performance │ │ │ │ ├── detail.html │ │ │ │ └── search.html │ │ │ │ ├── Section │ │ │ │ ├── detail.html │ │ │ │ └── search.html │ │ │ │ ├── SectionAllocation │ │ │ │ ├── detail.html │ │ │ │ └── search.html │ │ │ │ ├── Show │ │ │ │ ├── detail.html │ │ │ │ └── search.html │ │ │ │ ├── Ticket │ │ │ │ ├── detail.html │ │ │ │ └── search.html │ │ │ │ ├── TicketCategory │ │ │ │ ├── detail.html │ │ │ │ └── search.html │ │ │ │ ├── TicketPrice │ │ │ │ ├── detail.html │ │ │ │ └── search.html │ │ │ │ ├── Venue │ │ │ │ ├── detail.html │ │ │ │ └── search.html │ │ │ │ └── landing.html │ │ ├── config.xml │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── mobileapp.html │ │ ├── res │ │ │ ├── icon │ │ │ │ ├── cordova_128.png │ │ │ │ ├── cordova_16.png │ │ │ │ ├── cordova_24.png │ │ │ │ ├── cordova_256.png │ │ │ │ ├── cordova_32.png │ │ │ │ ├── cordova_48.png │ │ │ │ ├── cordova_512.png │ │ │ │ ├── cordova_64.png │ │ │ │ ├── cordova_android_36.png │ │ │ │ ├── cordova_android_48.png │ │ │ │ ├── cordova_android_72.png │ │ │ │ ├── cordova_android_96.png │ │ │ │ ├── cordova_bb_80.png │ │ │ │ ├── cordova_ios_114.png │ │ │ │ ├── cordova_ios_144.png │ │ │ │ ├── cordova_ios_57.png │ │ │ │ └── cordova_ios_72.png │ │ │ └── screen │ │ │ │ ├── android_hdpi_landscape.png │ │ │ │ ├── android_hdpi_portrait.png │ │ │ │ ├── android_ldpi_landscape.png │ │ │ │ ├── android_ldpi_portrait.png │ │ │ │ ├── android_mdpi_landscape.png │ │ │ │ ├── android_mdpi_portrait.png │ │ │ │ ├── android_xhdpi_landscape.png │ │ │ │ ├── android_xhdpi_portrait.png │ │ │ │ ├── blackberry_transparent_300.png │ │ │ │ ├── blackberry_transparent_400.png │ │ │ │ ├── ipad_landscape.png │ │ │ │ ├── ipad_portrait.png │ │ │ │ ├── ipad_retina_landscape.png │ │ │ │ ├── ipad_retina_portrait.png │ │ │ │ ├── iphone_landscape.png │ │ │ │ ├── iphone_portrait.png │ │ │ │ ├── iphone_retina_landscape.png │ │ │ │ ├── iphone_retina_portrait.png │ │ │ │ └── windows_phone_portrait.jpg │ │ └── resources │ │ │ ├── css │ │ │ ├── bootstrap-theme.css │ │ │ ├── bootstrap.css │ │ │ ├── m.screen.css │ │ │ └── screen.css │ │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ ├── img │ │ │ ├── GitHub_Logo.png │ │ │ ├── banner.png │ │ │ ├── bg-dark.png │ │ │ ├── bg-red.png │ │ │ ├── bg.png │ │ │ ├── btn-grey-hvr.png │ │ │ ├── btn-grey.png │ │ │ ├── btn-pink-hvr.png │ │ │ ├── btn-pink.png │ │ │ ├── glyphicons-halflings-white.png │ │ │ ├── glyphicons-halflings.png │ │ │ ├── glyphicons_019_cogwheel.png │ │ │ ├── glyphicons_163_iphone.png │ │ │ ├── glyphicons_232_cloud.png │ │ │ ├── glyphicons_351_book_open.png │ │ │ ├── jdf_logo_450px.png │ │ │ ├── jdf_mark_100px.png │ │ │ ├── jdf_mark_50px.png │ │ │ ├── jdf_mark_75px.png │ │ │ ├── logo.png │ │ │ ├── nav-bg-dark.png │ │ │ ├── nav-bg.png │ │ │ ├── rhjb_eap_logo.png │ │ │ └── splash-ticketmonster.png │ │ │ └── js │ │ │ ├── app │ │ │ ├── aggregator │ │ │ │ ├── desktop.js │ │ │ │ ├── main.html │ │ │ │ └── mobile.js │ │ │ ├── api │ │ │ │ └── services.js │ │ │ ├── booking │ │ │ │ ├── add-tickets.html │ │ │ │ ├── booking-detail.html │ │ │ │ ├── booking-list.html │ │ │ │ ├── booking.html │ │ │ │ ├── checkout-booking.html │ │ │ │ └── view.js │ │ │ ├── components │ │ │ │ └── components.js │ │ │ ├── eventDetail │ │ │ │ ├── eventDetail.html │ │ │ │ └── eventDetailView.js │ │ │ ├── events │ │ │ │ ├── events.html │ │ │ │ └── eventsView.js │ │ │ ├── home │ │ │ │ ├── home.html │ │ │ │ └── view.js │ │ │ ├── monitor │ │ │ │ ├── monitor.html │ │ │ │ └── monitor.js │ │ │ ├── venueDetail │ │ │ │ ├── venueDetail.html │ │ │ │ └── venueDetailView.js │ │ │ └── venues │ │ │ │ ├── venues.html │ │ │ │ └── venuesView.js │ │ │ ├── configurations │ │ │ ├── desktop.js │ │ │ ├── hybrid.js │ │ │ ├── loader.js │ │ │ └── mobile.js │ │ │ └── libs │ │ │ ├── angular-resource.js │ │ │ ├── angular-route.js │ │ │ ├── angular-touch.js │ │ │ ├── angular.js │ │ │ ├── bootstrap.js │ │ │ ├── jquery-2.1.1.js │ │ │ ├── modernizr-2.8.3.min.js │ │ │ ├── require.js │ │ │ ├── text.js │ │ │ └── underscore.js │ └── wf-standalone │ │ ├── module │ │ ├── module.xml │ │ └── mysql-connector-java-5.1.38.jar │ │ └── standalone.xml │ └── test │ ├── java │ └── org │ │ └── jboss │ │ └── examples │ │ └── ticketmonster │ │ └── test │ │ ├── TicketMonsterDeployment.java │ │ └── rest │ │ ├── BookingServiceTest.java │ │ ├── EventServiceTest.java │ │ ├── RESTDeployment.java │ │ ├── ShowServiceTest.java │ │ └── VenueServiceTest.java │ └── resources │ ├── META-INF │ └── test-persistence.xml │ ├── arquillian.xml │ └── test-ds.xml ├── orders-service ├── Readme.md ├── build-docker.sh ├── docs │ ├── hoverfly-capture.md │ ├── json-schema.md │ └── mysql.md ├── pom.xml ├── push-docker.sh ├── scripts │ ├── grants.sql │ ├── orders.sql │ ├── ticketmonster00.sql │ └── ticketmonster01.sql └── src │ ├── main │ ├── fabric8 │ │ └── deployment.yml │ ├── java │ │ └── org │ │ │ └── ticketmonster │ │ │ └── orders │ │ │ ├── Application.java │ │ │ ├── booking │ │ │ ├── AllocatedSeats.java │ │ │ ├── BookingRequested.java │ │ │ ├── BookingServiceController.java │ │ │ ├── BookingStatus.java │ │ │ ├── RestServiceException.java │ │ │ ├── SeatAllocationService.java │ │ │ ├── SectionComparator.java │ │ │ └── TicketRequest.java │ │ │ ├── config │ │ │ └── TeiidDataSources.java │ │ │ └── domain │ │ │ ├── Booking.java │ │ │ ├── EventId.java │ │ │ ├── IdGenerator.java │ │ │ ├── PerformanceId.java │ │ │ ├── Seat.java │ │ │ ├── SeatAllocationException.java │ │ │ ├── Section.java │ │ │ ├── SectionAllocation.java │ │ │ ├── Show.java │ │ │ ├── SyntheticBooking.java │ │ │ ├── Ticket.java │ │ │ ├── TicketCategory.java │ │ │ ├── TicketPriceGuide.java │ │ │ └── VenueId.java │ └── resources │ │ ├── application-kube.properties │ │ ├── application-mysql.properties │ │ ├── application.properties │ │ └── h2 │ │ └── scripts │ │ ├── legacydb-data.sql │ │ ├── legacydb-schema.sql │ │ ├── ordersdb-data.sql │ │ └── ordersdb-schema.sql │ └── test │ ├── java │ └── org │ │ └── ticketmonster │ │ └── orders │ │ ├── BookingRequestedTest.java │ │ ├── BookingServiceIT.java │ │ ├── ConsumerContractTest.java │ │ ├── HoverflyTest.java │ │ ├── SimpleTest.java │ │ ├── TeiidVdbQueryIT.java │ │ └── config │ │ └── TeiidTestDataSources.java │ └── resources │ ├── application.properties │ ├── hoverfly │ └── simulation.json │ ├── json-schema │ ├── rest-events.json │ ├── rest-shows.json │ ├── rest-single-booking.json │ ├── rest-single-event.json │ └── rest-single-show.json │ └── pact │ └── test_synthetic_order-orders_service.json ├── pom.xml ├── tm-ui-v1 ├── Dockerfile ├── README.md ├── build-docker.sh ├── httpd.conf ├── public-html │ ├── admin │ │ ├── app.html │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── img │ │ │ └── forge-logo.png │ │ ├── index.html │ │ ├── scripts │ │ │ ├── app.js │ │ │ ├── controllers │ │ │ │ ├── editBookingController.js │ │ │ │ ├── editEventCategoryController.js │ │ │ │ ├── editEventController.js │ │ │ │ ├── editMediaItemController.js │ │ │ │ ├── editPerformanceController.js │ │ │ │ ├── editSectionAllocationController.js │ │ │ │ ├── editSectionController.js │ │ │ │ ├── editShowController.js │ │ │ │ ├── editTicketCategoryController.js │ │ │ │ ├── editTicketController.js │ │ │ │ ├── editTicketPriceController.js │ │ │ │ ├── editVenueController.js │ │ │ │ ├── flashController.js │ │ │ │ ├── newBookingController.js │ │ │ │ ├── newEventCategoryController.js │ │ │ │ ├── newEventController.js │ │ │ │ ├── newMediaItemController.js │ │ │ │ ├── newPerformanceController.js │ │ │ │ ├── newSectionAllocationController.js │ │ │ │ ├── newSectionController.js │ │ │ │ ├── newShowController.js │ │ │ │ ├── newTicketCategoryController.js │ │ │ │ ├── newTicketController.js │ │ │ │ ├── newTicketPriceController.js │ │ │ │ ├── newVenueController.js │ │ │ │ ├── searchBookingController.js │ │ │ │ ├── searchEventCategoryController.js │ │ │ │ ├── searchEventController.js │ │ │ │ ├── searchMediaItemController.js │ │ │ │ ├── searchPerformanceController.js │ │ │ │ ├── searchSectionAllocationController.js │ │ │ │ ├── searchSectionController.js │ │ │ │ ├── searchShowController.js │ │ │ │ ├── searchTicketCategoryController.js │ │ │ │ ├── searchTicketController.js │ │ │ │ ├── searchTicketPriceController.js │ │ │ │ └── searchVenueController.js │ │ │ ├── directives │ │ │ │ ├── datepicker.js │ │ │ │ ├── datetimepicker.js │ │ │ │ └── timepicker.js │ │ │ ├── filters │ │ │ │ ├── genericSearchFilter.js │ │ │ │ └── startFromFilter.js │ │ │ ├── offcanvas.js │ │ │ ├── services │ │ │ │ ├── BookingFactory.js │ │ │ │ ├── EventCategoryFactory.js │ │ │ │ ├── EventFactory.js │ │ │ │ ├── MediaItemFactory.js │ │ │ │ ├── PerformanceFactory.js │ │ │ │ ├── SectionAllocationFactory.js │ │ │ │ ├── SectionFactory.js │ │ │ │ ├── ShowFactory.js │ │ │ │ ├── TicketCategoryFactory.js │ │ │ │ ├── TicketFactory.js │ │ │ │ ├── TicketPriceFactory.js │ │ │ │ ├── VenueFactory.js │ │ │ │ ├── flash.js │ │ │ │ └── locationParser.js │ │ │ └── vendor │ │ │ │ ├── angular-resource.js │ │ │ │ ├── angular-route.js │ │ │ │ ├── angular.js │ │ │ │ ├── bootstrap.js │ │ │ │ ├── jquery-2.1.1.js │ │ │ │ └── modernizr-2.8.3.min.js │ │ ├── styles │ │ │ ├── bootstrap-theme.css │ │ │ ├── bootstrap.css │ │ │ ├── custom-forge.css │ │ │ └── main.css │ │ └── views │ │ │ ├── Booking │ │ │ ├── detail.html │ │ │ └── search.html │ │ │ ├── Event │ │ │ ├── detail.html │ │ │ └── search.html │ │ │ ├── EventCategory │ │ │ ├── detail.html │ │ │ └── search.html │ │ │ ├── MediaItem │ │ │ ├── detail.html │ │ │ └── search.html │ │ │ ├── Performance │ │ │ ├── detail.html │ │ │ └── search.html │ │ │ ├── Section │ │ │ ├── detail.html │ │ │ └── search.html │ │ │ ├── SectionAllocation │ │ │ ├── detail.html │ │ │ └── search.html │ │ │ ├── Show │ │ │ ├── detail.html │ │ │ └── search.html │ │ │ ├── Ticket │ │ │ ├── detail.html │ │ │ └── search.html │ │ │ ├── TicketCategory │ │ │ ├── detail.html │ │ │ └── search.html │ │ │ ├── TicketPrice │ │ │ ├── detail.html │ │ │ └── search.html │ │ │ ├── Venue │ │ │ ├── detail.html │ │ │ └── search.html │ │ │ └── landing.html │ ├── config.xml │ ├── favicon.ico │ ├── index.html │ ├── mobileapp.html │ ├── res │ │ ├── icon │ │ │ ├── cordova_128.png │ │ │ ├── cordova_16.png │ │ │ ├── cordova_24.png │ │ │ ├── cordova_256.png │ │ │ ├── cordova_32.png │ │ │ ├── cordova_48.png │ │ │ ├── cordova_512.png │ │ │ ├── cordova_64.png │ │ │ ├── cordova_android_36.png │ │ │ ├── cordova_android_48.png │ │ │ ├── cordova_android_72.png │ │ │ ├── cordova_android_96.png │ │ │ ├── cordova_bb_80.png │ │ │ ├── cordova_ios_114.png │ │ │ ├── cordova_ios_144.png │ │ │ ├── cordova_ios_57.png │ │ │ └── cordova_ios_72.png │ │ └── screen │ │ │ ├── android_hdpi_landscape.png │ │ │ ├── android_hdpi_portrait.png │ │ │ ├── android_ldpi_landscape.png │ │ │ ├── android_ldpi_portrait.png │ │ │ ├── android_mdpi_landscape.png │ │ │ ├── android_mdpi_portrait.png │ │ │ ├── android_xhdpi_landscape.png │ │ │ ├── android_xhdpi_portrait.png │ │ │ ├── blackberry_transparent_300.png │ │ │ ├── blackberry_transparent_400.png │ │ │ ├── ipad_landscape.png │ │ │ ├── ipad_portrait.png │ │ │ ├── ipad_retina_landscape.png │ │ │ ├── ipad_retina_portrait.png │ │ │ ├── iphone_landscape.png │ │ │ ├── iphone_portrait.png │ │ │ ├── iphone_retina_landscape.png │ │ │ ├── iphone_retina_portrait.png │ │ │ └── windows_phone_portrait.jpg │ └── resources │ │ ├── css │ │ ├── bootstrap-theme.css │ │ ├── bootstrap.css │ │ ├── m.screen.css │ │ └── screen.css │ │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── img │ │ ├── GitHub_Logo.png │ │ ├── banner.png │ │ ├── bg-dark.png │ │ ├── bg-red.png │ │ ├── bg.png │ │ ├── btn-grey-hvr.png │ │ ├── btn-grey.png │ │ ├── btn-pink-hvr.png │ │ ├── btn-pink.png │ │ ├── glyphicons-halflings-white.png │ │ ├── glyphicons-halflings.png │ │ ├── glyphicons_019_cogwheel.png │ │ ├── glyphicons_163_iphone.png │ │ ├── glyphicons_232_cloud.png │ │ ├── glyphicons_351_book_open.png │ │ ├── jdf_logo_450px.png │ │ ├── jdf_mark_100px.png │ │ ├── jdf_mark_50px.png │ │ ├── jdf_mark_75px.png │ │ ├── logo.png │ │ ├── nav-bg-dark.png │ │ ├── nav-bg.png │ │ ├── rhjb_eap_logo.png │ │ └── splash-ticketmonster.png │ │ └── js │ │ ├── app │ │ ├── aggregator │ │ │ ├── desktop.js │ │ │ ├── main.html │ │ │ └── mobile.js │ │ ├── api │ │ │ └── services.js │ │ ├── booking │ │ │ ├── add-tickets.html │ │ │ ├── booking-detail.html │ │ │ ├── booking-list.html │ │ │ ├── booking.html │ │ │ ├── checkout-booking.html │ │ │ └── view.js │ │ ├── components │ │ │ └── components.js │ │ ├── eventDetail │ │ │ ├── eventDetail.html │ │ │ └── eventDetailView.js │ │ ├── events │ │ │ ├── events.html │ │ │ └── eventsView.js │ │ ├── home │ │ │ ├── home.html │ │ │ └── view.js │ │ ├── monitor │ │ │ ├── monitor.html │ │ │ └── monitor.js │ │ ├── venueDetail │ │ │ ├── venueDetail.html │ │ │ └── venueDetailView.js │ │ └── venues │ │ │ ├── venues.html │ │ │ └── venuesView.js │ │ ├── configurations │ │ ├── desktop.js │ │ ├── hybrid.js │ │ ├── loader.js │ │ └── mobile.js │ │ └── libs │ │ ├── angular-resource.js │ │ ├── angular-route.js │ │ ├── angular-touch.js │ │ ├── angular.js │ │ ├── bootstrap.js │ │ ├── jquery-2.1.1.js │ │ ├── modernizr-2.8.3.min.js │ │ ├── require.js │ │ ├── text.js │ │ └── underscore.js └── push-docker.sh └── tm-ui-v2 ├── Dockerfile ├── README.md ├── build-docker.sh ├── httpd.conf ├── public-html ├── admin │ ├── app.html │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ ├── img │ │ └── forge-logo.png │ ├── index.html │ ├── scripts │ │ ├── app.js │ │ ├── controllers │ │ │ ├── editBookingController.js │ │ │ ├── editEventCategoryController.js │ │ │ ├── editEventController.js │ │ │ ├── editMediaItemController.js │ │ │ ├── editPerformanceController.js │ │ │ ├── editSectionAllocationController.js │ │ │ ├── editSectionController.js │ │ │ ├── editShowController.js │ │ │ ├── editTicketCategoryController.js │ │ │ ├── editTicketController.js │ │ │ ├── editTicketPriceController.js │ │ │ ├── editVenueController.js │ │ │ ├── flashController.js │ │ │ ├── newBookingController.js │ │ │ ├── newEventCategoryController.js │ │ │ ├── newEventController.js │ │ │ ├── newMediaItemController.js │ │ │ ├── newPerformanceController.js │ │ │ ├── newSectionAllocationController.js │ │ │ ├── newSectionController.js │ │ │ ├── newShowController.js │ │ │ ├── newTicketCategoryController.js │ │ │ ├── newTicketController.js │ │ │ ├── newTicketPriceController.js │ │ │ ├── newVenueController.js │ │ │ ├── searchBookingController.js │ │ │ ├── searchEventCategoryController.js │ │ │ ├── searchEventController.js │ │ │ ├── searchMediaItemController.js │ │ │ ├── searchPerformanceController.js │ │ │ ├── searchSectionAllocationController.js │ │ │ ├── searchSectionController.js │ │ │ ├── searchShowController.js │ │ │ ├── searchTicketCategoryController.js │ │ │ ├── searchTicketController.js │ │ │ ├── searchTicketPriceController.js │ │ │ └── searchVenueController.js │ │ ├── directives │ │ │ ├── datepicker.js │ │ │ ├── datetimepicker.js │ │ │ └── timepicker.js │ │ ├── filters │ │ │ ├── genericSearchFilter.js │ │ │ └── startFromFilter.js │ │ ├── offcanvas.js │ │ ├── services │ │ │ ├── BookingFactory.js │ │ │ ├── EventCategoryFactory.js │ │ │ ├── EventFactory.js │ │ │ ├── MediaItemFactory.js │ │ │ ├── PerformanceFactory.js │ │ │ ├── SectionAllocationFactory.js │ │ │ ├── SectionFactory.js │ │ │ ├── ShowFactory.js │ │ │ ├── TicketCategoryFactory.js │ │ │ ├── TicketFactory.js │ │ │ ├── TicketPriceFactory.js │ │ │ ├── VenueFactory.js │ │ │ ├── flash.js │ │ │ └── locationParser.js │ │ └── vendor │ │ │ ├── angular-resource.js │ │ │ ├── angular-route.js │ │ │ ├── angular.js │ │ │ ├── bootstrap.js │ │ │ ├── jquery-2.1.1.js │ │ │ └── modernizr-2.8.3.min.js │ ├── styles │ │ ├── bootstrap-theme.css │ │ ├── bootstrap.css │ │ ├── custom-forge.css │ │ └── main.css │ └── views │ │ ├── Booking │ │ ├── detail.html │ │ └── search.html │ │ ├── Event │ │ ├── detail.html │ │ └── search.html │ │ ├── EventCategory │ │ ├── detail.html │ │ └── search.html │ │ ├── MediaItem │ │ ├── detail.html │ │ └── search.html │ │ ├── Performance │ │ ├── detail.html │ │ └── search.html │ │ ├── Section │ │ ├── detail.html │ │ └── search.html │ │ ├── SectionAllocation │ │ ├── detail.html │ │ └── search.html │ │ ├── Show │ │ ├── detail.html │ │ └── search.html │ │ ├── Ticket │ │ ├── detail.html │ │ └── search.html │ │ ├── TicketCategory │ │ ├── detail.html │ │ └── search.html │ │ ├── TicketPrice │ │ ├── detail.html │ │ └── search.html │ │ ├── Venue │ │ ├── detail.html │ │ └── search.html │ │ └── landing.html ├── config.xml ├── favicon.ico ├── index.html ├── mobileapp.html ├── res │ ├── icon │ │ ├── cordova_128.png │ │ ├── cordova_16.png │ │ ├── cordova_24.png │ │ ├── cordova_256.png │ │ ├── cordova_32.png │ │ ├── cordova_48.png │ │ ├── cordova_512.png │ │ ├── cordova_64.png │ │ ├── cordova_android_36.png │ │ ├── cordova_android_48.png │ │ ├── cordova_android_72.png │ │ ├── cordova_android_96.png │ │ ├── cordova_bb_80.png │ │ ├── cordova_ios_114.png │ │ ├── cordova_ios_144.png │ │ ├── cordova_ios_57.png │ │ └── cordova_ios_72.png │ └── screen │ │ ├── android_hdpi_landscape.png │ │ ├── android_hdpi_portrait.png │ │ ├── android_ldpi_landscape.png │ │ ├── android_ldpi_portrait.png │ │ ├── android_mdpi_landscape.png │ │ ├── android_mdpi_portrait.png │ │ ├── android_xhdpi_landscape.png │ │ ├── android_xhdpi_portrait.png │ │ ├── blackberry_transparent_300.png │ │ ├── blackberry_transparent_400.png │ │ ├── ipad_landscape.png │ │ ├── ipad_portrait.png │ │ ├── ipad_retina_landscape.png │ │ ├── ipad_retina_portrait.png │ │ ├── iphone_landscape.png │ │ ├── iphone_portrait.png │ │ ├── iphone_retina_landscape.png │ │ ├── iphone_retina_portrait.png │ │ └── windows_phone_portrait.jpg └── resources │ ├── css │ ├── bootstrap-theme.css │ ├── bootstrap.css │ ├── m.screen.css │ └── screen.css │ ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 │ ├── img │ ├── GitHub_Logo.png │ ├── banner.png │ ├── bg-dark.png │ ├── bg-red.png │ ├── bg.png │ ├── btn-grey-hvr.png │ ├── btn-grey.png │ ├── btn-pink-hvr.png │ ├── btn-pink.png │ ├── glyphicons-halflings-white.png │ ├── glyphicons-halflings.png │ ├── glyphicons_019_cogwheel.png │ ├── glyphicons_163_iphone.png │ ├── glyphicons_232_cloud.png │ ├── glyphicons_351_book_open.png │ ├── jdf_logo_450px.png │ ├── jdf_mark_100px.png │ ├── jdf_mark_50px.png │ ├── jdf_mark_75px.png │ ├── logo.png │ ├── nav-bg-dark.png │ ├── nav-bg.png │ ├── rhjb_eap_logo.png │ └── splash-ticketmonster.png │ └── js │ ├── app │ ├── aggregator │ │ ├── desktop.js │ │ ├── main.html │ │ └── mobile.js │ ├── api │ │ └── services.js │ ├── booking │ │ ├── add-tickets.html │ │ ├── booking-detail.html │ │ ├── booking-list.html │ │ ├── booking.html │ │ ├── checkout-booking.html │ │ └── view.js │ ├── components │ │ └── components.js │ ├── eventDetail │ │ ├── eventDetail.html │ │ └── eventDetailView.js │ ├── events │ │ ├── events.html │ │ └── eventsView.js │ ├── home │ │ ├── home.html │ │ └── view.js │ ├── monitor │ │ ├── monitor.html │ │ └── monitor.js │ ├── venueDetail │ │ ├── venueDetail.html │ │ └── venueDetailView.js │ └── venues │ │ ├── venues.html │ │ └── venuesView.js │ ├── configurations │ ├── desktop.js │ ├── hybrid.js │ ├── loader.js │ └── mobile.js │ └── libs │ ├── angular-resource.js │ ├── angular-route.js │ ├── angular-touch.js │ ├── angular.js │ ├── bootstrap.js │ ├── jquery-2.1.1.js │ ├── modernizr-2.8.3.min.js │ ├── require.js │ ├── text.js │ └── underscore.js └── push-docker.sh /.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | .idea 3 | *.iml 4 | *.log 5 | .classpath 6 | .project 7 | .settings 8 | deployments 9 | orders-service/ObjectStore/ 10 | deployment/kubernetes/istio/istio-0.* 11 | -------------------------------------------------------------------------------- /backend-v1/Readme.md: -------------------------------------------------------------------------------- 1 | This `backend` module contains the monolith Ticket Monster service **without** the UI. Use an external UI to connect pu to the REST API that this service exposes. 2 | 3 | 4 | ## How to build 5 | 6 | Build the source code to connect to a MySQL database. Note the, default url that will be used is `mysql-backend:3306` 7 | 8 | ``` 9 | mvn clean install -Pmysql,kubernetes 10 | ``` 11 | 12 | To build the docker image associated with this: 13 | 14 | ``` 15 | mvn clean install -Pmysql,kubernetes fabric8:build 16 | ``` 17 | 18 | This will create a docker image named `ceposta/backend-mysql:latest`. This image is the same image that should be on Docker Hub: [https://hub.docker.com/r/ceposta/backend-mysql/](https://hub.docker.com/r/ceposta/backend-mysql/) 19 | 20 | This is the same image used in the deployment scripts. 21 | 22 | If you want the `backend` service before we added scientist/FF impl, checkout this SHA: a07942b -------------------------------------------------------------------------------- /backend-v1/build-docker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | mvn clean install -Pmysql,kubernetes fabric8:build -Ddocker.image.name=ceposta/backend-mysql:v1 -------------------------------------------------------------------------------- /backend-v1/push-docker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker push ceposta/backend-mysql:v1 -------------------------------------------------------------------------------- /backend-v1/src/main/fabric8/deployment.yml: -------------------------------------------------------------------------------- 1 | spec: 2 | template: 3 | metadata: 4 | labels: 5 | service: backend 6 | spec: 7 | containers: 8 | - livenessProbe: 9 | httpGet: 10 | path: /rest/ping 11 | port: 8080 12 | initialDelaySeconds: 60 13 | periodSeconds: 30 14 | readinessProbe: 15 | httpGet: 16 | path: /rest/ping 17 | port: 8080 18 | initialDelaySeconds: 60 19 | periodSeconds: 30 20 | -------------------------------------------------------------------------------- /backend-v1/src/main/java/org/jboss/examples/ticketmonster/model/SeatAllocationException.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.model; 2 | 3 | import javax.ejb.ApplicationException; 4 | 5 | /** 6 | *

7 | * The exception thrown if an error occurs in seat allocation. 8 | *

9 | *

10 | * We mark it as {@link ApplicationException} because it is part of the application logic. Also, 11 | * we want the container to roll back automatically when it is thrown. 12 | *

13 | * 14 | * @author Marius Bogoevici 15 | */ 16 | @SuppressWarnings("serial") 17 | @ApplicationException(rollback = true) 18 | public class SeatAllocationException extends RuntimeException { 19 | 20 | public SeatAllocationException() { 21 | } 22 | 23 | public SeatAllocationException(String s) { 24 | super(s); 25 | } 26 | 27 | public SeatAllocationException(String s, Throwable throwable) { 28 | super(s, throwable); 29 | } 30 | 31 | public SeatAllocationException(Throwable throwable) { 32 | super(throwable); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /backend-v1/src/main/java/org/jboss/examples/ticketmonster/rest/BotState.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.rest; 2 | 3 | /** 4 | * An enumeration that represents the possible states for the Bot. 5 | * 6 | * @author Vineet Reynolds 7 | * 8 | */ 9 | public enum BotState { 10 | RUNNING, NOT_RUNNING, RESET 11 | } 12 | -------------------------------------------------------------------------------- /backend-v1/src/main/java/org/jboss/examples/ticketmonster/rest/JaxRsActivator.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.rest; 2 | 3 | import javax.ws.rs.ApplicationPath; 4 | import javax.ws.rs.core.Application; 5 | 6 | /** 7 | * A class extending {@link Application} and annotated with @ApplicationPath is the Java EE 8 | * "no XML" approach to activating JAX-RS. 9 | * 10 | *

11 | * Resources are served relative to the servlet path specified in the {@link ApplicationPath} 12 | * annotation. 13 | *

14 | */ 15 | @ApplicationPath("/rest") 16 | public class JaxRsActivator extends Application { 17 | /* class body intentionally left blank */ 18 | } 19 | -------------------------------------------------------------------------------- /backend-v1/src/main/java/org/jboss/examples/ticketmonster/rest/PerformanceMetric.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.rest; 2 | 3 | import java.util.Date; 4 | 5 | import org.jboss.examples.ticketmonster.model.Performance; 6 | 7 | /** 8 | * Metric data for a Performance. Contains the datetime for the performance to 9 | * identify the performance, as well as the occupied count for the performance. 10 | * 11 | * @author Vineet Reynolds 12 | * 13 | */ 14 | class PerformanceMetric { 15 | 16 | private Date date; 17 | private Long occupiedCount; 18 | 19 | // Constructor to populate the instance with data 20 | public PerformanceMetric(Performance performance, Long occupiedCount) { 21 | this.date = performance.getDate(); 22 | this.occupiedCount = (occupiedCount == null ? 0 : occupiedCount); 23 | } 24 | 25 | // Getters for Jackson 26 | // NOTE: No setters and default constructors are defined since 27 | // deserialization is not required. 28 | 29 | public Date getDate() { 30 | return date; 31 | } 32 | 33 | public Long getOccupiedCount() { 34 | return occupiedCount; 35 | } 36 | 37 | } -------------------------------------------------------------------------------- /backend-v1/src/main/java/org/jboss/examples/ticketmonster/rest/SectionComparator.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.rest; 2 | 3 | import java.util.Comparator; 4 | 5 | import org.jboss.examples.ticketmonster.model.Section; 6 | 7 | /** 8 | * A utility comparator for sections, sorting them by id 9 | * 10 | * @author Marius Bogoevici 11 | */ 12 | public class SectionComparator implements Comparator
{ 13 | 14 | private static final SectionComparator INSTANCE = new SectionComparator(); 15 | 16 | private SectionComparator(){ 17 | } 18 | 19 | public static SectionComparator instance() { 20 | return INSTANCE; 21 | } 22 | 23 | @Override 24 | public int compare(Section section, Section otherSection) { 25 | return section.getId().compareTo(otherSection.getId()); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /backend-v1/src/main/java/org/jboss/examples/ticketmonster/rest/TicketRequest.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.rest; 2 | 3 | import org.jboss.examples.ticketmonster.model.TicketPrice; 4 | 5 | /** 6 | *

7 | * A {@link BookingRequest} will contain multiple {@link TicketRequest}s. 8 | *

9 | * 10 | * @author Marius Bogoevici 11 | * @author Pete Muir 12 | * 13 | */ 14 | public class TicketRequest { 15 | 16 | private long ticketPrice; 17 | 18 | private int quantity; 19 | 20 | public TicketRequest() { 21 | // Empty constructor 22 | } 23 | 24 | public TicketRequest(TicketPrice ticketPrice, int quantity) { 25 | this.ticketPrice = ticketPrice.getId(); 26 | this.quantity = quantity; 27 | } 28 | 29 | public long getTicketPrice() { 30 | return ticketPrice; 31 | } 32 | 33 | public void setTicketPrice(long ticketPrice) { 34 | this.ticketPrice = ticketPrice; 35 | } 36 | 37 | public int getQuantity() { 38 | return quantity; 39 | } 40 | 41 | public void setQuantity(int quantity) { 42 | this.quantity = quantity; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /backend-v1/src/main/java/org/jboss/examples/ticketmonster/rest/VenueService.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.rest; 2 | 3 | import javax.ejb.Stateless; 4 | import javax.ws.rs.Path; 5 | 6 | import org.jboss.examples.ticketmonster.model.Venue; 7 | 8 | /** 9 | *

10 | * A JAX-RS endpoint for handling {@link Venue}s. Inherits the actual 11 | * methods from {@link BaseEntityService}. 12 | *

13 | * 14 | * @author Marius Bogoevici 15 | */ 16 | @Path("/venues") 17 | /** 18 | *

19 | * This is a stateless service, we declare it as an EJB for transaction demarcation 20 | *

21 | */ 22 | @Stateless 23 | public class VenueService extends BaseEntityService { 24 | 25 | public VenueService() { 26 | super(Venue.class); 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /backend-v1/src/main/java/org/jboss/examples/ticketmonster/service/AllocatedSeats.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.service; 2 | 3 | import java.util.List; 4 | 5 | import org.jboss.examples.ticketmonster.model.Seat; 6 | import org.jboss.examples.ticketmonster.model.SectionAllocation; 7 | 8 | /** 9 | * A transient object which represents a collection of pre-allocated seats 10 | * 11 | * @author Marius Bogoevici 12 | */ 13 | public class AllocatedSeats { 14 | 15 | private final SectionAllocation sectionAllocation; 16 | 17 | private final List seats; 18 | 19 | public AllocatedSeats(SectionAllocation sectionAllocation, List seats) { 20 | this.sectionAllocation = sectionAllocation; 21 | this.seats = seats; 22 | } 23 | 24 | public SectionAllocation getSectionAllocation() { 25 | return sectionAllocation; 26 | } 27 | 28 | public List getSeats() { 29 | return seats; 30 | } 31 | 32 | public void markOccupied() { 33 | sectionAllocation.markOccupied(seats); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /backend-v1/src/main/java/org/jboss/examples/ticketmonster/service/MediaPath.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.service; 2 | 3 | import org.jboss.examples.ticketmonster.model.MediaType; 4 | 5 | public class MediaPath { 6 | 7 | private final String url; 8 | private final boolean cached; 9 | private final MediaType mediaType; 10 | 11 | public MediaPath(String url, boolean cached, MediaType mediaType) { 12 | this.url = url; 13 | this.cached = cached; 14 | this.mediaType = mediaType; 15 | } 16 | 17 | public String getUrl() { 18 | return url; 19 | } 20 | 21 | public boolean isCached() { 22 | return cached; 23 | } 24 | 25 | public MediaType getMediaType() { 26 | return mediaType; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /backend-v1/src/main/java/org/jboss/examples/ticketmonster/util/Reflections.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.util; 2 | 3 | import java.net.URL; 4 | 5 | /** 6 | * Utilities relating to Java reflection 7 | * 8 | * @author pmuir 9 | * 10 | */ 11 | public class Reflections { 12 | 13 | private Reflections() { 14 | } 15 | 16 | /** 17 | * Get a resource by name, first searching the thread context classloader, and then the classloader of the Reflections 18 | * class. 19 | */ 20 | public static URL getResource(String name) { 21 | if (Thread.currentThread().getContextClassLoader() != null) { 22 | return Thread.currentThread().getContextClassLoader().getResource(name); 23 | } else { 24 | return Reflections.class.getClassLoader().getResource(name); 25 | } 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /backend-v1/src/main/java/org/jboss/examples/ticketmonster/util/qualifier/BotMessage.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.util.qualifier; 2 | 3 | import java.lang.annotation.Documented; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.Target; 6 | 7 | import javax.inject.Qualifier; 8 | 9 | import static java.lang.annotation.ElementType.FIELD; 10 | import static java.lang.annotation.ElementType.METHOD; 11 | import static java.lang.annotation.ElementType.PARAMETER; 12 | import static java.lang.annotation.ElementType.TYPE; 13 | import static java.lang.annotation.RetentionPolicy.RUNTIME; 14 | 15 | @Qualifier 16 | @Target({ TYPE, METHOD, PARAMETER, FIELD }) 17 | @Retention(RUNTIME) 18 | @Documented 19 | public @interface BotMessage { 20 | 21 | } 22 | -------------------------------------------------------------------------------- /backend-v1/src/main/java/org/jboss/examples/ticketmonster/util/qualifier/Cancelled.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.util.qualifier; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | import javax.inject.Qualifier; 9 | 10 | /** 11 | * {@link Qualifier} to mark a Booking as cancelled. 12 | * 13 | * @author Christian Sadilek 14 | */ 15 | @Qualifier 16 | @Target({ElementType.FIELD,ElementType.PARAMETER,ElementType.METHOD,ElementType.TYPE}) 17 | @Retention(RetentionPolicy.RUNTIME) 18 | public @interface Cancelled { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /backend-v1/src/main/java/org/jboss/examples/ticketmonster/util/qualifier/Created.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.util.qualifier; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | import javax.inject.Qualifier; 9 | 10 | /** 11 | * {@link Qualifier} to mark a Booking as new (created). 12 | * 13 | * @author Christian Sadilek 14 | */ 15 | @Qualifier 16 | @Target({ElementType.FIELD,ElementType.PARAMETER,ElementType.METHOD,ElementType.TYPE}) 17 | @Retention(RetentionPolicy.RUNTIME) 18 | public @interface Created { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /backend-v1/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootLogger=INFO, mainlogger 2 | log4j.appender.mainlogger=org.apache.log4j.ConsoleAppender 3 | log4j.appender.mainlogger.target=System.out 4 | log4j.appender.mainlogger.layout=org.apache.log4j.PatternLayout 5 | log4j.appender.mainlogger.layout.ConversionPattern=%p [%c{1}] %m%n -------------------------------------------------------------------------------- /backend-v1/src/main/resources/not_available.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/backend-v1/src/main/resources/not_available.jpg -------------------------------------------------------------------------------- /backend-v1/src/main/webapp/WEB-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /backend-v1/src/main/webapp/WEB-INF/jboss-deployment-structure.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend-v1/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | ticket-monster 4 | 5 | 30 6 | 7 | 8 | ico 9 | image/x-icon 10 | 11 | 12 | /index.html 13 | 14 | 15 | -------------------------------------------------------------------------------- /backend-v1/src/main/wf-standalone/module/module.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend-v1/src/main/wf-standalone/module/mysql-connector-java-5.1.38.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/backend-v1/src/main/wf-standalone/module/mysql-connector-java-5.1.38.jar -------------------------------------------------------------------------------- /backend-v1/src/test/java/org/jboss/examples/ticketmonster/test/TicketMonsterDeployment.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.test; 2 | 3 | import org.jboss.examples.ticketmonster.util.Resources; 4 | import org.jboss.shrinkwrap.api.ShrinkWrap; 5 | import org.jboss.shrinkwrap.api.asset.EmptyAsset; 6 | import org.jboss.shrinkwrap.api.spec.WebArchive; 7 | 8 | public class TicketMonsterDeployment { 9 | 10 | public static WebArchive deployment() { 11 | return ShrinkWrap 12 | .create(WebArchive.class, "test.war") 13 | .addPackage(Resources.class.getPackage()) 14 | .addAsResource("META-INF/test-persistence.xml", "META-INF/persistence.xml") 15 | .addAsResource("import.sql") 16 | .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml") 17 | // Deploy our test datasource 18 | .addAsWebInfResource("test-ds.xml"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /backend-v1/src/test/java/org/jboss/examples/ticketmonster/test/rest/RESTDeployment.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.test.rest; 2 | 3 | import org.jboss.examples.ticketmonster.model.Booking; 4 | import org.jboss.examples.ticketmonster.rest.BaseEntityService; 5 | import org.jboss.examples.ticketmonster.rest.dto.VenueDTO; 6 | import org.jboss.examples.ticketmonster.service.*; 7 | import org.jboss.examples.ticketmonster.test.TicketMonsterDeployment; 8 | import org.jboss.shrinkwrap.api.spec.WebArchive; 9 | 10 | public class RESTDeployment { 11 | 12 | public static WebArchive deployment() { 13 | 14 | 15 | return TicketMonsterDeployment.deployment() 16 | .addPackage(Booking.class.getPackage()) 17 | .addPackage(BaseEntityService.class.getPackage()) 18 | .addPackage(VenueDTO.class.getPackage()) 19 | .addPackage(SeatAllocationService.class.getPackage()) 20 | .addClass(AllocatedSeats.class) 21 | .addClass(MediaPath.class) 22 | .addClass(MediaManager.class); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /backend-v2/Readme.md: -------------------------------------------------------------------------------- 1 | This `backend` module contains the monolith Ticket Monster service **without** the UI. Use an external UI to connect pu to the REST API that this service exposes. 2 | 3 | 4 | ## How to build 5 | 6 | Build the source code to connect to a MySQL database. Note the, default url that will be used is `mysql-backend:3306` 7 | 8 | ``` 9 | mvn clean install -Pmysql,kubernetes 10 | ``` 11 | 12 | To build the docker image associated with this: 13 | 14 | ``` 15 | mvn clean install -Pmysql,kubernetes fabric8:build 16 | ``` 17 | 18 | This will create a docker image named `ceposta/backend-mysql:latest`. This image is the same image that should be on Docker Hub: [https://hub.docker.com/r/ceposta/backend-mysql/](https://hub.docker.com/r/ceposta/backend-mysql/) 19 | 20 | This is the same image used in the deployment scripts. 21 | 22 | If you want the `backend` service before we added scientist/FF impl, checkout this SHA: a07942b -------------------------------------------------------------------------------- /backend-v2/build-docker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | mvn clean install -Pmysql,kubernetes fabric8:build -Ddocker.image.name=ceposta/backend-mysql:v2 -------------------------------------------------------------------------------- /backend-v2/push-docker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker push ceposta/backend-mysql:v2 -------------------------------------------------------------------------------- /backend-v2/src/main/fabric8/deployment.yml: -------------------------------------------------------------------------------- 1 | spec: 2 | template: 3 | metadata: 4 | labels: 5 | service: backend 6 | spec: 7 | containers: 8 | - livenessProbe: 9 | httpGet: 10 | path: /rest/ping 11 | port: 8080 12 | initialDelaySeconds: 60 13 | periodSeconds: 30 14 | readinessProbe: 15 | httpGet: 16 | path: /rest/ping 17 | port: 8080 18 | initialDelaySeconds: 60 19 | periodSeconds: 30 20 | -------------------------------------------------------------------------------- /backend-v2/src/main/java/org/jboss/examples/ticketmonster/model/SeatAllocationException.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.model; 2 | 3 | import javax.ejb.ApplicationException; 4 | 5 | /** 6 | *

7 | * The exception thrown if an error occurs in seat allocation. 8 | *

9 | *

10 | * We mark it as {@link ApplicationException} because it is part of the application logic. Also, 11 | * we want the container to roll back automatically when it is thrown. 12 | *

13 | * 14 | * @author Marius Bogoevici 15 | */ 16 | @SuppressWarnings("serial") 17 | @ApplicationException(rollback = true) 18 | public class SeatAllocationException extends RuntimeException { 19 | 20 | public SeatAllocationException() { 21 | } 22 | 23 | public SeatAllocationException(String s) { 24 | super(s); 25 | } 26 | 27 | public SeatAllocationException(String s, Throwable throwable) { 28 | super(s, throwable); 29 | } 30 | 31 | public SeatAllocationException(Throwable throwable) { 32 | super(throwable); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /backend-v2/src/main/java/org/jboss/examples/ticketmonster/rest/BotState.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.rest; 2 | 3 | /** 4 | * An enumeration that represents the possible states for the Bot. 5 | * 6 | * @author Vineet Reynolds 7 | * 8 | */ 9 | public enum BotState { 10 | RUNNING, NOT_RUNNING, RESET 11 | } 12 | -------------------------------------------------------------------------------- /backend-v2/src/main/java/org/jboss/examples/ticketmonster/rest/JaxRsActivator.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.rest; 2 | 3 | import javax.ws.rs.ApplicationPath; 4 | import javax.ws.rs.core.Application; 5 | 6 | /** 7 | * A class extending {@link Application} and annotated with @ApplicationPath is the Java EE 8 | * "no XML" approach to activating JAX-RS. 9 | * 10 | *

11 | * Resources are served relative to the servlet path specified in the {@link ApplicationPath} 12 | * annotation. 13 | *

14 | */ 15 | @ApplicationPath("/rest") 16 | public class JaxRsActivator extends Application { 17 | /* class body intentionally left blank */ 18 | } 19 | -------------------------------------------------------------------------------- /backend-v2/src/main/java/org/jboss/examples/ticketmonster/rest/PerformanceMetric.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.rest; 2 | 3 | import java.util.Date; 4 | 5 | import org.jboss.examples.ticketmonster.model.Performance; 6 | 7 | /** 8 | * Metric data for a Performance. Contains the datetime for the performance to 9 | * identify the performance, as well as the occupied count for the performance. 10 | * 11 | * @author Vineet Reynolds 12 | * 13 | */ 14 | class PerformanceMetric { 15 | 16 | private Date date; 17 | private Long occupiedCount; 18 | 19 | // Constructor to populate the instance with data 20 | public PerformanceMetric(Performance performance, Long occupiedCount) { 21 | this.date = performance.getDate(); 22 | this.occupiedCount = (occupiedCount == null ? 0 : occupiedCount); 23 | } 24 | 25 | // Getters for Jackson 26 | // NOTE: No setters and default constructors are defined since 27 | // deserialization is not required. 28 | 29 | public Date getDate() { 30 | return date; 31 | } 32 | 33 | public Long getOccupiedCount() { 34 | return occupiedCount; 35 | } 36 | 37 | } -------------------------------------------------------------------------------- /backend-v2/src/main/java/org/jboss/examples/ticketmonster/rest/SectionComparator.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.rest; 2 | 3 | import java.util.Comparator; 4 | 5 | import org.jboss.examples.ticketmonster.model.Section; 6 | 7 | /** 8 | * A utility comparator for sections, sorting them by id 9 | * 10 | * @author Marius Bogoevici 11 | */ 12 | public class SectionComparator implements Comparator
{ 13 | 14 | private static final SectionComparator INSTANCE = new SectionComparator(); 15 | 16 | private SectionComparator(){ 17 | } 18 | 19 | public static SectionComparator instance() { 20 | return INSTANCE; 21 | } 22 | 23 | @Override 24 | public int compare(Section section, Section otherSection) { 25 | return section.getId().compareTo(otherSection.getId()); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /backend-v2/src/main/java/org/jboss/examples/ticketmonster/rest/TicketRequest.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.rest; 2 | 3 | import org.jboss.examples.ticketmonster.model.TicketPrice; 4 | 5 | /** 6 | *

7 | * A {@link BookingRequest} will contain multiple {@link TicketRequest}s. 8 | *

9 | * 10 | * @author Marius Bogoevici 11 | * @author Pete Muir 12 | * 13 | */ 14 | public class TicketRequest { 15 | 16 | private long ticketPrice; 17 | 18 | private int quantity; 19 | 20 | public TicketRequest() { 21 | // Empty constructor 22 | } 23 | 24 | public TicketRequest(TicketPrice ticketPrice, int quantity) { 25 | this.ticketPrice = ticketPrice.getId(); 26 | this.quantity = quantity; 27 | } 28 | 29 | public long getTicketPrice() { 30 | return ticketPrice; 31 | } 32 | 33 | public void setTicketPrice(long ticketPrice) { 34 | this.ticketPrice = ticketPrice; 35 | } 36 | 37 | public int getQuantity() { 38 | return quantity; 39 | } 40 | 41 | public void setQuantity(int quantity) { 42 | this.quantity = quantity; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /backend-v2/src/main/java/org/jboss/examples/ticketmonster/rest/VenueService.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.rest; 2 | 3 | import javax.ejb.Stateless; 4 | import javax.ws.rs.Path; 5 | 6 | import org.jboss.examples.ticketmonster.model.Venue; 7 | 8 | /** 9 | *

10 | * A JAX-RS endpoint for handling {@link Venue}s. Inherits the actual 11 | * methods from {@link BaseEntityService}. 12 | *

13 | * 14 | * @author Marius Bogoevici 15 | */ 16 | @Path("/venues") 17 | /** 18 | *

19 | * This is a stateless service, we declare it as an EJB for transaction demarcation 20 | *

21 | */ 22 | @Stateless 23 | public class VenueService extends BaseEntityService { 24 | 25 | public VenueService() { 26 | super(Venue.class); 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /backend-v2/src/main/java/org/jboss/examples/ticketmonster/service/AllocatedSeats.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.service; 2 | 3 | import java.util.List; 4 | 5 | import org.jboss.examples.ticketmonster.model.Seat; 6 | import org.jboss.examples.ticketmonster.model.SectionAllocation; 7 | 8 | /** 9 | * A transient object which represents a collection of pre-allocated seats 10 | * 11 | * @author Marius Bogoevici 12 | */ 13 | public class AllocatedSeats { 14 | 15 | private final SectionAllocation sectionAllocation; 16 | 17 | private final List seats; 18 | 19 | public AllocatedSeats(SectionAllocation sectionAllocation, List seats) { 20 | this.sectionAllocation = sectionAllocation; 21 | this.seats = seats; 22 | } 23 | 24 | public SectionAllocation getSectionAllocation() { 25 | return sectionAllocation; 26 | } 27 | 28 | public List getSeats() { 29 | return seats; 30 | } 31 | 32 | public void markOccupied() { 33 | sectionAllocation.markOccupied(seats); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /backend-v2/src/main/java/org/jboss/examples/ticketmonster/service/MediaPath.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.service; 2 | 3 | import org.jboss.examples.ticketmonster.model.MediaType; 4 | 5 | public class MediaPath { 6 | 7 | private final String url; 8 | private final boolean cached; 9 | private final MediaType mediaType; 10 | 11 | public MediaPath(String url, boolean cached, MediaType mediaType) { 12 | this.url = url; 13 | this.cached = cached; 14 | this.mediaType = mediaType; 15 | } 16 | 17 | public String getUrl() { 18 | return url; 19 | } 20 | 21 | public boolean isCached() { 22 | return cached; 23 | } 24 | 25 | public MediaType getMediaType() { 26 | return mediaType; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /backend-v2/src/main/java/org/jboss/examples/ticketmonster/util/Reflections.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.util; 2 | 3 | import java.net.URL; 4 | 5 | /** 6 | * Utilities relating to Java reflection 7 | * 8 | * @author pmuir 9 | * 10 | */ 11 | public class Reflections { 12 | 13 | private Reflections() { 14 | } 15 | 16 | /** 17 | * Get a resource by name, first searching the thread context classloader, and then the classloader of the Reflections 18 | * class. 19 | */ 20 | public static URL getResource(String name) { 21 | if (Thread.currentThread().getContextClassLoader() != null) { 22 | return Thread.currentThread().getContextClassLoader().getResource(name); 23 | } else { 24 | return Reflections.class.getClassLoader().getResource(name); 25 | } 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /backend-v2/src/main/java/org/jboss/examples/ticketmonster/util/qualifier/BotMessage.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.util.qualifier; 2 | 3 | import java.lang.annotation.Documented; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.Target; 6 | 7 | import javax.inject.Qualifier; 8 | 9 | import static java.lang.annotation.ElementType.FIELD; 10 | import static java.lang.annotation.ElementType.METHOD; 11 | import static java.lang.annotation.ElementType.PARAMETER; 12 | import static java.lang.annotation.ElementType.TYPE; 13 | import static java.lang.annotation.RetentionPolicy.RUNTIME; 14 | 15 | @Qualifier 16 | @Target({ TYPE, METHOD, PARAMETER, FIELD }) 17 | @Retention(RUNTIME) 18 | @Documented 19 | public @interface BotMessage { 20 | 21 | } 22 | -------------------------------------------------------------------------------- /backend-v2/src/main/java/org/jboss/examples/ticketmonster/util/qualifier/Cancelled.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.util.qualifier; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | import javax.inject.Qualifier; 9 | 10 | /** 11 | * {@link Qualifier} to mark a Booking as cancelled. 12 | * 13 | * @author Christian Sadilek 14 | */ 15 | @Qualifier 16 | @Target({ElementType.FIELD,ElementType.PARAMETER,ElementType.METHOD,ElementType.TYPE}) 17 | @Retention(RetentionPolicy.RUNTIME) 18 | public @interface Cancelled { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /backend-v2/src/main/java/org/jboss/examples/ticketmonster/util/qualifier/Created.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.util.qualifier; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | import javax.inject.Qualifier; 9 | 10 | /** 11 | * {@link Qualifier} to mark a Booking as new (created). 12 | * 13 | * @author Christian Sadilek 14 | */ 15 | @Qualifier 16 | @Target({ElementType.FIELD,ElementType.PARAMETER,ElementType.METHOD,ElementType.TYPE}) 17 | @Retention(RetentionPolicy.RUNTIME) 18 | public @interface Created { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /backend-v2/src/main/resources/ff4j.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /backend-v2/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootLogger=INFO, mainlogger 2 | log4j.appender.mainlogger=org.apache.log4j.ConsoleAppender 3 | log4j.appender.mainlogger.target=System.out 4 | log4j.appender.mainlogger.layout=org.apache.log4j.PatternLayout 5 | log4j.appender.mainlogger.layout.ConversionPattern=%p [%c{1}] %m%n -------------------------------------------------------------------------------- /backend-v2/src/main/resources/not_available.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/backend-v2/src/main/resources/not_available.jpg -------------------------------------------------------------------------------- /backend-v2/src/main/webapp/WEB-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /backend-v2/src/main/webapp/WEB-INF/jboss-deployment-structure.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend-v2/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | ticket-monster 4 | 5 | 30 6 | 7 | 8 | ico 9 | image/x-icon 10 | 11 | 12 | /index.html 13 | 14 | 15 | -------------------------------------------------------------------------------- /backend-v2/src/main/wf-standalone/module/module.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend-v2/src/main/wf-standalone/module/mysql-connector-java-5.1.38.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/backend-v2/src/main/wf-standalone/module/mysql-connector-java-5.1.38.jar -------------------------------------------------------------------------------- /backend-v2/src/test/java/org/jboss/examples/ticketmonster/test/TicketMonsterDeployment.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.test; 2 | 3 | import org.jboss.examples.ticketmonster.util.Resources; 4 | import org.jboss.shrinkwrap.api.ShrinkWrap; 5 | import org.jboss.shrinkwrap.api.asset.EmptyAsset; 6 | import org.jboss.shrinkwrap.api.spec.WebArchive; 7 | import org.jboss.shrinkwrap.resolver.api.maven.Maven; 8 | 9 | import java.io.File; 10 | 11 | public class TicketMonsterDeployment { 12 | 13 | public static WebArchive deployment() { 14 | 15 | File[] ff4jDeps = Maven.resolver().resolve("org.ff4j:ff4j-core:1.6.5") 16 | .withTransitivity().asFile(); 17 | return ShrinkWrap 18 | .create(WebArchive.class, "test.war") 19 | .addPackage(Resources.class.getPackage()) 20 | .addAsResource("META-INF/test-persistence.xml", "META-INF/persistence.xml") 21 | .addAsResource("import.sql") 22 | .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml") 23 | // Deploy our test datasource 24 | .addAsWebInfResource("test-ds.xml") 25 | .addAsLibraries(ff4jDeps) 26 | .addAsResource("ff4j.xml") 27 | ; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /backend-v2/src/test/java/org/jboss/examples/ticketmonster/test/rest/RESTDeployment.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.test.rest; 2 | 3 | import org.jboss.examples.ticketmonster.model.Booking; 4 | import org.jboss.examples.ticketmonster.rest.BaseEntityService; 5 | import org.jboss.examples.ticketmonster.rest.dto.VenueDTO; 6 | import org.jboss.examples.ticketmonster.service.*; 7 | import org.jboss.examples.ticketmonster.test.TicketMonsterDeployment; 8 | import org.jboss.shrinkwrap.api.spec.WebArchive; 9 | 10 | public class RESTDeployment { 11 | 12 | public static WebArchive deployment() { 13 | 14 | 15 | return TicketMonsterDeployment.deployment() 16 | .addPackage(Booking.class.getPackage()) 17 | .addPackage(BaseEntityService.class.getPackage()) 18 | .addPackage(VenueDTO.class.getPackage()) 19 | .addPackage(SeatAllocationService.class.getPackage()) 20 | .addClass(AllocatedSeats.class) 21 | .addClass(MediaPath.class) 22 | .addClass(MediaManager.class); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /deployment/kubernetes/core/backend/backend-svc.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | labels: 6 | expose: "true" 7 | app: backend 8 | provider: fabric8 9 | group: org.jboss.examples.eap 10 | name: backend 11 | spec: 12 | ports: 13 | - name: http 14 | port: 8080 15 | protocol: TCP 16 | targetPort: 8080 17 | selector: 18 | service: backend 19 | -------------------------------------------------------------------------------- /deployment/kubernetes/core/backend/v1/backend-v1-svc.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | annotations: 6 | fabric8.io/git-commit: 3279e9bcf74f0f2ef56a583d35535624cf88a5bc 7 | fabric8.io/git-branch: migrate-workshop 8 | labels: 9 | expose: "true" 10 | app: backend-v1 11 | provider: fabric8 12 | version: "1.0" 13 | group: org.jboss.examples.eap 14 | name: backend-v1 15 | spec: 16 | ports: 17 | - name: http 18 | port: 8080 19 | protocol: TCP 20 | targetPort: 8080 21 | selector: 22 | app: backend-v1 23 | provider: fabric8 24 | group: org.jboss.examples.eap 25 | -------------------------------------------------------------------------------- /deployment/kubernetes/core/backend/v2/backend-v2-svc.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | annotations: 6 | fabric8.io/git-commit: 3279e9bcf74f0f2ef56a583d35535624cf88a5bc 7 | fabric8.io/git-branch: migrate-workshop 8 | labels: 9 | expose: "true" 10 | app: backend-v2 11 | provider: fabric8 12 | version: "2.0" 13 | group: org.jboss.examples.eap 14 | name: backend-v2 15 | spec: 16 | ports: 17 | - name: http 18 | port: 8080 19 | protocol: TCP 20 | targetPort: 8080 21 | selector: 22 | app: backend-v2 23 | provider: fabric8 24 | group: org.jboss.examples.eap 25 | -------------------------------------------------------------------------------- /deployment/kubernetes/core/frontend/talk-to-backend/tm-ui-deployment.yml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: Deployment 3 | metadata: 4 | name: tm-ui-v2 5 | spec: 6 | replicas: 1 7 | selector: 8 | matchLabels: 9 | run: tm-ui 10 | version: v2 11 | strategy: 12 | rollingUpdate: 13 | maxSurge: 1 14 | maxUnavailable: 1 15 | type: RollingUpdate 16 | template: 17 | metadata: 18 | creationTimestamp: null 19 | labels: 20 | run: tm-ui 21 | version: v2 22 | spec: 23 | containers: 24 | - image: ceposta/tm-ui:backend 25 | imagePullPolicy: IfNotPresent 26 | name: tm-ui 27 | ports: 28 | - containerPort: 80 29 | protocol: TCP 30 | resources: {} 31 | terminationMessagePath: /dev/termination-log 32 | terminationMessagePolicy: File 33 | dnsPolicy: ClusterFirst 34 | restartPolicy: Always 35 | schedulerName: default-scheduler 36 | securityContext: {} 37 | terminationGracePeriodSeconds: 30 38 | -------------------------------------------------------------------------------- /deployment/kubernetes/core/frontend/talk-to-monolith/tm-ui-deployment.yml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: Deployment 3 | metadata: 4 | name: tm-ui-v1 5 | spec: 6 | replicas: 1 7 | selector: 8 | matchLabels: 9 | run: tm-ui 10 | version: v1 11 | strategy: 12 | rollingUpdate: 13 | maxSurge: 1 14 | maxUnavailable: 1 15 | type: RollingUpdate 16 | template: 17 | metadata: 18 | creationTimestamp: null 19 | labels: 20 | run: tm-ui 21 | version: v1 22 | spec: 23 | containers: 24 | - image: ceposta/tm-ui:monolith 25 | imagePullPolicy: IfNotPresent 26 | name: tm-ui 27 | ports: 28 | - containerPort: 80 29 | protocol: TCP 30 | resources: {} 31 | terminationMessagePath: /dev/termination-log 32 | terminationMessagePolicy: File 33 | dnsPolicy: ClusterFirst 34 | restartPolicy: Always 35 | schedulerName: default-scheduler 36 | securityContext: {} 37 | terminationGracePeriodSeconds: 30 38 | -------------------------------------------------------------------------------- /deployment/kubernetes/core/frontend/ticket-monster-ingress.yml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: Ingress 3 | metadata: 4 | name: tm-gateway 5 | annotations: 6 | kubernetes.io/ingress.class: "istio" 7 | spec: 8 | backend: 9 | serviceName: tm-ui 10 | servicePort: 80 11 | -------------------------------------------------------------------------------- /deployment/kubernetes/core/frontend/tm-ui-svc.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | labels: 6 | expose: "true" 7 | run: tm-ui 8 | name: tm-ui 9 | spec: 10 | ports: 11 | - name: http 12 | port: 80 13 | protocol: TCP 14 | targetPort: 80 15 | selector: 16 | run: tm-ui 17 | sessionAffinity: None 18 | -------------------------------------------------------------------------------- /deployment/kubernetes/core/monolith/mysql-deployment.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: extensions/v1beta1 3 | kind: Deployment 4 | metadata: 5 | name: mysql-backend 6 | spec: 7 | strategy: 8 | type: Recreate 9 | template: 10 | metadata: 11 | labels: 12 | app: ticketmonster 13 | component: backend 14 | spec: 15 | containers: 16 | - image: mysql:5.6 17 | name: mysql 18 | env: 19 | # Use secret in real usage 20 | - name: MYSQL_ROOT_PASSWORD 21 | value: admin 22 | - name: MYSQL_DATABASE 23 | value: ticketmonster 24 | - name: MYSQL_USER 25 | value: ticket 26 | - name: MYSQL_PASSWORD 27 | value: monster 28 | ports: 29 | - containerPort: 3306 30 | name: mysql 31 | 32 | -------------------------------------------------------------------------------- /deployment/kubernetes/core/monolith/mysql-svc.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: mysql-backend 6 | spec: 7 | ports: 8 | - port: 3306 9 | selector: 10 | app: ticketmonster 11 | component: backend -------------------------------------------------------------------------------- /deployment/kubernetes/core/monolith/ticket-monster-ingress.yml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: Ingress 3 | metadata: 4 | name: tm-gateway 5 | annotations: 6 | kubernetes.io/ingress.class: "istio" 7 | spec: 8 | backend: 9 | serviceName: ticket-monster 10 | servicePort: 8080 11 | -------------------------------------------------------------------------------- /deployment/kubernetes/core/monolith/ticket-monster-svc.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | annotations: 6 | fabric8.io/git-commit: 3279e9bcf74f0f2ef56a583d35535624cf88a5bc 7 | fabric8.io/git-branch: migrate-workshop 8 | labels: 9 | expose: "true" 10 | app: ticket-monster 11 | provider: fabric8 12 | version: 3.0.0-SNAPSHOT 13 | group: org.jboss.examples.eap 14 | name: ticket-monster 15 | spec: 16 | ports: 17 | - name: http 18 | port: 8080 19 | protocol: TCP 20 | targetPort: 8080 21 | selector: 22 | app: ticket-monster 23 | provider: fabric8 24 | group: org.jboss.examples.eap 25 | -------------------------------------------------------------------------------- /deployment/kubernetes/core/monolith/tm-ui-svc.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | labels: 6 | expose: "true" 7 | run: tm-ui 8 | name: tm-ui 9 | spec: 10 | ports: 11 | - name: http 12 | port: 80 13 | protocol: TCP 14 | targetPort: 80 15 | selector: 16 | run: tm-ui 17 | sessionAffinity: None 18 | -------------------------------------------------------------------------------- /deployment/kubernetes/core/orders/mysql-deployment.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: extensions/v1beta1 3 | kind: Deployment 4 | metadata: 5 | name: mysql-orders 6 | spec: 7 | strategy: 8 | type: Recreate 9 | template: 10 | metadata: 11 | labels: 12 | app: ticketmonster 13 | component: orders 14 | spec: 15 | containers: 16 | - image: mysql:5.6 17 | name: mysql 18 | env: 19 | # Use secret in real usage 20 | - name: MYSQL_ROOT_PASSWORD 21 | value: admin 22 | - name: MYSQL_DATABASE 23 | value: orders 24 | - name: MYSQL_USER 25 | value: ticket 26 | - name: MYSQL_PASSWORD 27 | value: monster 28 | ports: 29 | - containerPort: 3306 30 | name: mysql 31 | volumeMounts: 32 | - name: mysql-config 33 | mountPath: /docker-entrypoint-initdb.d/ 34 | volumes: 35 | - name: mysql-config 36 | configMap: 37 | name: orders-mysql-config 38 | 39 | -------------------------------------------------------------------------------- /deployment/kubernetes/core/orders/mysql-svc.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: mysql-orders 6 | spec: 7 | ports: 8 | - port: 3306 9 | selector: 10 | app: ticketmonster 11 | component: orders -------------------------------------------------------------------------------- /deployment/kubernetes/core/orders/orders-service-svc.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | annotations: 6 | fabric8.io/git-commit: d274512765d69ebdd100ca68c1180a7a2bc59753 7 | fabric8.io/iconUrl: img/icons/spring-boot.svg 8 | fabric8.io/git-branch: migrate-workshop 9 | prometheus.io/scrape: "true" 10 | prometheus.io/port: "9779" 11 | labels: 12 | expose: "true" 13 | app: orders-service 14 | provider: fabric8 15 | version: 1.0.0-SNAPSHOT 16 | group: org.ticketmonster.orders 17 | name: orders-service 18 | spec: 19 | ports: 20 | - name: http 21 | port: 8080 22 | protocol: TCP 23 | targetPort: 8080 24 | selector: 25 | app: orders-service 26 | provider: fabric8 27 | group: org.ticketmonster.orders 28 | -------------------------------------------------------------------------------- /deployment/kubernetes/demo/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Monolith 4 | kubectl delete svc/ticket-monster 5 | kubectl delete svc/mysql-backend 6 | kubectl delete deploy/ticket-monster 7 | kubectl delete deploy/mysql-backend 8 | 9 | # Backend 10 | kubectl delete svc/backend 11 | kubectl delete deploy/backend-v1 12 | kubectl delete deploy/backend-v2 13 | 14 | # UI 15 | kubectl delete svc/tm-ui 16 | kubectl delete deploy/tm-ui-v1 17 | kubectl delete deploy/tm-ui-v2 18 | 19 | # Orders Service 20 | kubectl delete svc/orders-service 21 | kubectl delete deploy/orders-service 22 | kubectl delete svc/mysql-orders 23 | kubectl delete deploy/mysql-orders 24 | kubectl delete cm/orders-mysql-config 25 | 26 | 27 | 28 | # Ingress 29 | kubectl delete ingress/tm-gateway 30 | 31 | # Delete istio routes 32 | istioctl delete routerules $(istioctl get routerules | awk '{print $1}') -------------------------------------------------------------------------------- /deployment/kubernetes/demo/util.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #!/bin/bash 3 | 4 | readonly reset=$(tput sgr0) 5 | readonly green=$(tput bold; tput setaf 2) 6 | readonly yellow=$(tput bold; tput setaf 3) 7 | readonly blue=$(tput bold; tput setaf 6) 8 | 9 | function desc() { 10 | maybe_first_prompt 11 | echo "$blue# $@$reset" 12 | prompt 13 | } 14 | 15 | function prompt() { 16 | echo -n "$yellow\$ $reset" 17 | } 18 | 19 | started="" 20 | function maybe_first_prompt() { 21 | if [ -z "$started" ]; then 22 | prompt 23 | started=true 24 | fi 25 | } 26 | 27 | function backtotop() { 28 | 29 | clear 30 | } 31 | 32 | function run() { 33 | maybe_first_prompt 34 | rate=25 35 | if [ -n "$DEMO_RUN_FAST" ]; then 36 | rate=1000 37 | fi 38 | echo "$green$1$reset" | pv -qL $rate 39 | if [ -n "$DEMO_RUN_FAST" ]; then 40 | sleep 0.5 41 | fi 42 | eval "$1" 43 | r=$? 44 | read -d '' -t 1 -n 10000 # clear stdin 45 | prompt 46 | if [ -z "$DEMO_AUTO_RUN" ]; then 47 | read -s 48 | fi 49 | return $r 50 | } 51 | 52 | function relative() { 53 | for arg; do 54 | echo "$(realpath $(dirname $(which $0)))/$arg" | sed "s|$(realpath $(pwd))|.|" 55 | done 56 | } 57 | 58 | 59 | trap "echo" EXIT 60 | -------------------------------------------------------------------------------- /deployment/kubernetes/fabric8/expose-controller.md: -------------------------------------------------------------------------------- 1 | Usage: 2 | 3 | `kubectl label svc foo expose=true` 4 | 5 | -------------------------------------------------------------------------------- /deployment/kubernetes/istio/README.md: -------------------------------------------------------------------------------- 1 | This folder contains the istio resoruce files that we can use to deploy 2 | istio as well as some helper scripts 3 | 4 | > ./get-urls.sh 5 | -------------------------------------------------------------------------------- /deployment/kubernetes/istio/install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | curl -L https://git.io/getLatestIstio | sh - 3 | ISTIO=`ls | grep istio` 4 | export PATH="$PATH:~/$ISTIO/bin" 5 | cd $ISTIO 6 | kubectl apply -f install/kubernetes/istio.yaml 7 | 8 | kubectl create -f install/kubernetes/addons/prometheus.yaml 9 | kubectl create -f install/kubernetes/addons/grafana.yaml 10 | kubectl create -f install/kubernetes/addons/servicegraph.yaml 11 | kubectl create -f install/kubernetes/addons/zipkin.yaml -------------------------------------------------------------------------------- /deployment/kubernetes/istio/route-rules/route-tm-1pct-v2.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: config.istio.io/v1alpha2 2 | kind: RouteRule 3 | metadata: 4 | name: tm-ui-v2-1pct-canary 5 | spec: 6 | destination: 7 | name: tm-ui 8 | precedence: 20 9 | route: 10 | - labels: 11 | version: v1 12 | weight: 99 13 | - labels: 14 | version: v2 15 | weight: 1 -------------------------------------------------------------------------------- /deployment/kubernetes/istio/route-rules/route-tm-v1.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: config.istio.io/v1alpha2 2 | kind: RouteRule 3 | metadata: 4 | name: tm-ui-default 5 | spec: 6 | destination: 7 | name: tm-ui 8 | precedence: 1 9 | route: 10 | - labels: 11 | version: v1 12 | -------------------------------------------------------------------------------- /deployment/kubernetes/istio/route-rules/route-tm-v2-dark-launch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: config.istio.io/v1alpha2 2 | kind: RouteRule 3 | metadata: 4 | name: tm-ui-v2-dark-launch 5 | spec: 6 | destination: 7 | name: tm-ui 8 | precedence: 10 9 | match: 10 | request: 11 | headers: 12 | x-dark-launch: 13 | exact: "v2" 14 | route: 15 | - labels: 16 | version: v2 17 | 18 | -------------------------------------------------------------------------------- /deployment/kubernetes/istio/route-rules/route-tm-v2.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: config.istio.io/v1alpha2 2 | kind: RouteRule 3 | metadata: 4 | name: tm-ui-default-v2 5 | spec: 6 | destination: 7 | name: tm-ui 8 | precedence: 20 9 | route: 10 | - labels: 11 | version: v2 -------------------------------------------------------------------------------- /monolith/build-docker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | mvn clean install -Pmysql,kubernetes fabric8:build -Ddocker.image.name=ceposta/ticket-monster-mysql:monolith -------------------------------------------------------------------------------- /monolith/push-docker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker push ceposta/ticket-monster-mysql:monolith -------------------------------------------------------------------------------- /monolith/src/main/java/org/jboss/examples/ticketmonster/model/SeatAllocationException.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.model; 2 | 3 | import javax.ejb.ApplicationException; 4 | 5 | /** 6 | *

7 | * The exception thrown if an error occurs in seat allocation. 8 | *

9 | *

10 | * We mark it as {@link ApplicationException} because it is part of the application logic. Also, 11 | * we want the container to roll back automatically when it is thrown. 12 | *

13 | * 14 | * @author Marius Bogoevici 15 | */ 16 | @SuppressWarnings("serial") 17 | @ApplicationException(rollback = true) 18 | public class SeatAllocationException extends RuntimeException { 19 | 20 | public SeatAllocationException() { 21 | } 22 | 23 | public SeatAllocationException(String s) { 24 | super(s); 25 | } 26 | 27 | public SeatAllocationException(String s, Throwable throwable) { 28 | super(s, throwable); 29 | } 30 | 31 | public SeatAllocationException(Throwable throwable) { 32 | super(throwable); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /monolith/src/main/java/org/jboss/examples/ticketmonster/rest/BotState.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.rest; 2 | 3 | /** 4 | * An enumeration that represents the possible states for the Bot. 5 | * 6 | * @author Vineet Reynolds 7 | * 8 | */ 9 | public enum BotState { 10 | RUNNING, NOT_RUNNING, RESET 11 | } 12 | -------------------------------------------------------------------------------- /monolith/src/main/java/org/jboss/examples/ticketmonster/rest/JaxRsActivator.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.rest; 2 | 3 | import javax.ws.rs.ApplicationPath; 4 | import javax.ws.rs.core.Application; 5 | 6 | /** 7 | * A class extending {@link Application} and annotated with @ApplicationPath is the Java EE 8 | * "no XML" approach to activating JAX-RS. 9 | * 10 | *

11 | * Resources are served relative to the servlet path specified in the {@link ApplicationPath} 12 | * annotation. 13 | *

14 | */ 15 | @ApplicationPath("/rest") 16 | public class JaxRsActivator extends Application { 17 | /* class body intentionally left blank */ 18 | } 19 | -------------------------------------------------------------------------------- /monolith/src/main/java/org/jboss/examples/ticketmonster/rest/PerformanceMetric.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.rest; 2 | 3 | import java.util.Date; 4 | 5 | import org.jboss.examples.ticketmonster.model.Performance; 6 | 7 | /** 8 | * Metric data for a Performance. Contains the datetime for the performance to 9 | * identify the performance, as well as the occupied count for the performance. 10 | * 11 | * @author Vineet Reynolds 12 | * 13 | */ 14 | class PerformanceMetric { 15 | 16 | private Date date; 17 | private Long occupiedCount; 18 | 19 | // Constructor to populate the instance with data 20 | public PerformanceMetric(Performance performance, Long occupiedCount) { 21 | this.date = performance.getDate(); 22 | this.occupiedCount = (occupiedCount == null ? 0 : occupiedCount); 23 | } 24 | 25 | // Getters for Jackson 26 | // NOTE: No setters and default constructors are defined since 27 | // deserialization is not required. 28 | 29 | public Date getDate() { 30 | return date; 31 | } 32 | 33 | public Long getOccupiedCount() { 34 | return occupiedCount; 35 | } 36 | 37 | } -------------------------------------------------------------------------------- /monolith/src/main/java/org/jboss/examples/ticketmonster/rest/SectionComparator.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.rest; 2 | 3 | import java.util.Comparator; 4 | 5 | import org.jboss.examples.ticketmonster.model.Section; 6 | 7 | /** 8 | * A utility comparator for sections, sorting them by id 9 | * 10 | * @author Marius Bogoevici 11 | */ 12 | public class SectionComparator implements Comparator
{ 13 | 14 | private static final SectionComparator INSTANCE = new SectionComparator(); 15 | 16 | private SectionComparator(){ 17 | } 18 | 19 | public static SectionComparator instance() { 20 | return INSTANCE; 21 | } 22 | 23 | @Override 24 | public int compare(Section section, Section otherSection) { 25 | return section.getId().compareTo(otherSection.getId()); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /monolith/src/main/java/org/jboss/examples/ticketmonster/rest/TicketRequest.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.rest; 2 | 3 | import org.jboss.examples.ticketmonster.model.TicketPrice; 4 | 5 | /** 6 | *

7 | * A {@link BookingRequest} will contain multiple {@link TicketRequest}s. 8 | *

9 | * 10 | * @author Marius Bogoevici 11 | * @author Pete Muir 12 | * 13 | */ 14 | public class TicketRequest { 15 | 16 | private long ticketPrice; 17 | 18 | private int quantity; 19 | 20 | public TicketRequest() { 21 | // Empty constructor 22 | } 23 | 24 | public TicketRequest(TicketPrice ticketPrice, int quantity) { 25 | this.ticketPrice = ticketPrice.getId(); 26 | this.quantity = quantity; 27 | } 28 | 29 | public long getTicketPrice() { 30 | return ticketPrice; 31 | } 32 | 33 | public void setTicketPrice(long ticketPrice) { 34 | this.ticketPrice = ticketPrice; 35 | } 36 | 37 | public int getQuantity() { 38 | return quantity; 39 | } 40 | 41 | public void setQuantity(int quantity) { 42 | this.quantity = quantity; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /monolith/src/main/java/org/jboss/examples/ticketmonster/rest/VenueService.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.rest; 2 | 3 | import javax.ejb.Stateless; 4 | import javax.ws.rs.Path; 5 | 6 | import org.jboss.examples.ticketmonster.model.Venue; 7 | 8 | /** 9 | *

10 | * A JAX-RS endpoint for handling {@link Venue}s. Inherits the actual 11 | * methods from {@link BaseEntityService}. 12 | *

13 | * 14 | * @author Marius Bogoevici 15 | */ 16 | @Path("/venues") 17 | /** 18 | *

19 | * This is a stateless service, we declare it as an EJB for transaction demarcation 20 | *

21 | */ 22 | @Stateless 23 | public class VenueService extends BaseEntityService { 24 | 25 | public VenueService() { 26 | super(Venue.class); 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /monolith/src/main/java/org/jboss/examples/ticketmonster/service/AllocatedSeats.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.service; 2 | 3 | import java.util.List; 4 | 5 | import org.jboss.examples.ticketmonster.model.Seat; 6 | import org.jboss.examples.ticketmonster.model.SectionAllocation; 7 | 8 | /** 9 | * A transient object which represents a collection of pre-allocated seats 10 | * 11 | * @author Marius Bogoevici 12 | */ 13 | public class AllocatedSeats { 14 | 15 | private final SectionAllocation sectionAllocation; 16 | 17 | private final List seats; 18 | 19 | public AllocatedSeats(SectionAllocation sectionAllocation, List seats) { 20 | this.sectionAllocation = sectionAllocation; 21 | this.seats = seats; 22 | } 23 | 24 | public SectionAllocation getSectionAllocation() { 25 | return sectionAllocation; 26 | } 27 | 28 | public List getSeats() { 29 | return seats; 30 | } 31 | 32 | public void markOccupied() { 33 | sectionAllocation.markOccupied(seats); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /monolith/src/main/java/org/jboss/examples/ticketmonster/service/MediaPath.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.service; 2 | 3 | import org.jboss.examples.ticketmonster.model.MediaType; 4 | 5 | public class MediaPath { 6 | 7 | private final String url; 8 | private final boolean cached; 9 | private final MediaType mediaType; 10 | 11 | public MediaPath(String url, boolean cached, MediaType mediaType) { 12 | this.url = url; 13 | this.cached = cached; 14 | this.mediaType = mediaType; 15 | } 16 | 17 | public String getUrl() { 18 | return url; 19 | } 20 | 21 | public boolean isCached() { 22 | return cached; 23 | } 24 | 25 | public MediaType getMediaType() { 26 | return mediaType; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /monolith/src/main/java/org/jboss/examples/ticketmonster/util/Reflections.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.util; 2 | 3 | import java.net.URL; 4 | 5 | /** 6 | * Utilities relating to Java reflection 7 | * 8 | * @author pmuir 9 | * 10 | */ 11 | public class Reflections { 12 | 13 | private Reflections() { 14 | } 15 | 16 | /** 17 | * Get a resource by name, first searching the thread context classloader, and then the classloader of the Reflections 18 | * class. 19 | */ 20 | public static URL getResource(String name) { 21 | if (Thread.currentThread().getContextClassLoader() != null) { 22 | return Thread.currentThread().getContextClassLoader().getResource(name); 23 | } else { 24 | return Reflections.class.getClassLoader().getResource(name); 25 | } 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /monolith/src/main/java/org/jboss/examples/ticketmonster/util/qualifier/BotMessage.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.util.qualifier; 2 | 3 | import java.lang.annotation.Documented; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.Target; 6 | 7 | import javax.inject.Qualifier; 8 | 9 | import static java.lang.annotation.ElementType.FIELD; 10 | import static java.lang.annotation.ElementType.METHOD; 11 | import static java.lang.annotation.ElementType.PARAMETER; 12 | import static java.lang.annotation.ElementType.TYPE; 13 | import static java.lang.annotation.RetentionPolicy.RUNTIME; 14 | 15 | @Qualifier 16 | @Target({ TYPE, METHOD, PARAMETER, FIELD }) 17 | @Retention(RUNTIME) 18 | @Documented 19 | public @interface BotMessage { 20 | 21 | } 22 | -------------------------------------------------------------------------------- /monolith/src/main/java/org/jboss/examples/ticketmonster/util/qualifier/Cancelled.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.util.qualifier; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | import javax.inject.Qualifier; 9 | 10 | /** 11 | * {@link Qualifier} to mark a Booking as cancelled. 12 | * 13 | * @author Christian Sadilek 14 | */ 15 | @Qualifier 16 | @Target({ElementType.FIELD,ElementType.PARAMETER,ElementType.METHOD,ElementType.TYPE}) 17 | @Retention(RetentionPolicy.RUNTIME) 18 | public @interface Cancelled { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /monolith/src/main/java/org/jboss/examples/ticketmonster/util/qualifier/Created.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.util.qualifier; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | import javax.inject.Qualifier; 9 | 10 | /** 11 | * {@link Qualifier} to mark a Booking as new (created). 12 | * 13 | * @author Christian Sadilek 14 | */ 15 | @Qualifier 16 | @Target({ElementType.FIELD,ElementType.PARAMETER,ElementType.METHOD,ElementType.TYPE}) 17 | @Retention(RetentionPolicy.RUNTIME) 18 | public @interface Created { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /monolith/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootLogger=INFO, mainlogger 2 | log4j.appender.mainlogger=org.apache.log4j.ConsoleAppender 3 | log4j.appender.mainlogger.target=System.out 4 | log4j.appender.mainlogger.layout=org.apache.log4j.PatternLayout 5 | log4j.appender.mainlogger.layout.ConversionPattern=%p [%c{1}] %m%n -------------------------------------------------------------------------------- /monolith/src/main/resources/not_available.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/resources/not_available.jpg -------------------------------------------------------------------------------- /monolith/src/main/webapp/WEB-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /monolith/src/main/webapp/WEB-INF/jboss-deployment-structure.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /monolith/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | ticket-monster 4 | 5 | 30 6 | 7 | 8 | ico 9 | image/x-icon 10 | 11 | 12 | /index.html 13 | 14 | 15 | -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/admin/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/admin/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/admin/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/admin/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/img/forge-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/admin/img/forge-logo.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/scripts/controllers/flashController.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ticketmonster').controller('FlashController', ['$scope','flash', function ($scope, flash) { 4 | $scope.flash = flash; 5 | $scope.showAlert = false; 6 | 7 | $scope.$watch('flash.getMessage()', function(newVal) { 8 | var message = newVal; 9 | if(message && message.text) { 10 | $scope.showAlert = message.text.length > 0; 11 | } else { 12 | $scope.showAlert = false; 13 | } 14 | }); 15 | 16 | $scope.hideAlert = function() { 17 | $scope.showAlert = false; 18 | } 19 | }]); 20 | -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/scripts/controllers/newEventCategoryController.js: -------------------------------------------------------------------------------- 1 | 2 | angular.module('ticketmonster').controller('NewEventCategoryController', function ($scope, $location, locationParser, flash, EventCategoryResource ) { 3 | $scope.disabled = false; 4 | $scope.$location = $location; 5 | $scope.eventCategory = $scope.eventCategory || {}; 6 | 7 | 8 | $scope.save = function() { 9 | var successCallback = function(data,responseHeaders){ 10 | var id = locationParser(responseHeaders); 11 | flash.setMessage({'type':'success','text':'The eventCategory was created successfully.'}); 12 | $location.path('/EventCategories'); 13 | }; 14 | var errorCallback = function(response) { 15 | if(response && response.data && response.data.message) { 16 | flash.setMessage({'type': 'error', 'text': response.data.message}, true); 17 | } else { 18 | flash.setMessage({'type': 'error', 'text': 'Something broke. Retry, or cancel and start afresh.'}, true); 19 | } 20 | }; 21 | EventCategoryResource.save($scope.eventCategory, successCallback, errorCallback); 22 | }; 23 | 24 | $scope.cancel = function() { 25 | $location.path("/EventCategories"); 26 | }; 27 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/scripts/filters/startFromFilter.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ticketmonster').filter('startFrom', function() { 4 | return function(input, start) { 5 | start = +start; //parse to int 6 | return input.slice(start); 7 | }; 8 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/scripts/offcanvas.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function() { 2 | $('[data-toggle=offcanvas]').click(function() { 3 | $('.row-offcanvas').toggleClass('active'); 4 | }); 5 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/scripts/services/BookingFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('BookingResource', function($resource){ 2 | var resource = $resource('../rest/forge/bookings/:BookingId',{BookingId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/scripts/services/EventCategoryFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('EventCategoryResource', function($resource){ 2 | var resource = $resource('../rest/eventcategories/:EventCategoryId',{EventCategoryId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/scripts/services/EventFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('EventResource', function($resource){ 2 | var resource = $resource('../rest/forge/events/:EventId',{EventId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/scripts/services/MediaItemFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('MediaItemResource', function($resource){ 2 | var resource = $resource('../rest/mediaitems/:MediaItemId',{MediaItemId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/scripts/services/PerformanceFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('PerformanceResource', function($resource){ 2 | var resource = $resource('../rest/performances/:PerformanceId',{PerformanceId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/scripts/services/SectionAllocationFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('SectionAllocationResource', function($resource){ 2 | var resource = $resource('../rest/sectionallocations/:SectionAllocationId',{SectionAllocationId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/scripts/services/SectionFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('SectionResource', function($resource){ 2 | var resource = $resource('../rest/sections/:SectionId',{SectionId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/scripts/services/ShowFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('ShowResource', function($resource){ 2 | var resource = $resource('../rest/forge/shows/:ShowId',{ShowId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/scripts/services/TicketCategoryFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('TicketCategoryResource', function($resource){ 2 | var resource = $resource('../rest/ticketcategories/:TicketCategoryId',{TicketCategoryId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/scripts/services/TicketFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('TicketResource', function($resource){ 2 | var resource = $resource('../rest/tickets/:TicketId',{TicketId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/scripts/services/TicketPriceFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('TicketPriceResource', function($resource){ 2 | var resource = $resource('../rest/ticketprices/:TicketPriceId',{TicketPriceId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/scripts/services/VenueFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('VenueResource', function($resource){ 2 | var resource = $resource('../rest/forge/venues/:VenueId',{VenueId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/scripts/services/flash.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ticketmonster').factory('flash', ['$rootScope', function ($rootScope) { 4 | var messages = []; 5 | var currentMessage = {}; 6 | 7 | $rootScope.$on('$routeChangeSuccess', function() { 8 | currentMessage = messages.shift() || {}; 9 | }); 10 | 11 | return { 12 | getMessage: function () { 13 | return currentMessage; 14 | }, 15 | setMessage: function(message, pop) { 16 | switch(message.type) { 17 | case "error" : message.cssClass = "danger"; break; 18 | case "success" : message.cssClass = "success"; break; 19 | case "info" : message.cssClass = "info"; break; 20 | case "warning" : message.cssClass = "warning"; break; 21 | } 22 | messages.push(message); 23 | if(pop) { 24 | currentMessage = messages.shift() || {}; 25 | } 26 | } 27 | }; 28 | }]); 29 | -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/scripts/services/locationParser.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').value('locationParser', function(responseHeaders){ 2 | // Get the Location header and parse it. 3 | var locationHeader = responseHeaders('Location'); 4 | var fragments = locationHeader.split('/'); 5 | var id = fragments[fragments.length -1]; 6 | return id; 7 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/admin/views/landing.html: -------------------------------------------------------------------------------- 1 |

2 | Your application is running. 3 |

4 |

5 | Documentation 7 | | Get Excited!

9 | Forge Project
| User 11 | Forums | Report an issue 13 |

-------------------------------------------------------------------------------- /monolith/src/main/webapp/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/favicon.ico -------------------------------------------------------------------------------- /monolith/src/main/webapp/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Ticket Monster 5 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /monolith/src/main/webapp/mobileapp.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Ticket Monster 5 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/icon/cordova_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/icon/cordova_128.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/icon/cordova_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/icon/cordova_16.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/icon/cordova_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/icon/cordova_24.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/icon/cordova_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/icon/cordova_256.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/icon/cordova_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/icon/cordova_32.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/icon/cordova_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/icon/cordova_48.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/icon/cordova_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/icon/cordova_512.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/icon/cordova_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/icon/cordova_64.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/icon/cordova_android_36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/icon/cordova_android_36.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/icon/cordova_android_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/icon/cordova_android_48.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/icon/cordova_android_72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/icon/cordova_android_72.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/icon/cordova_android_96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/icon/cordova_android_96.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/icon/cordova_bb_80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/icon/cordova_bb_80.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/icon/cordova_ios_114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/icon/cordova_ios_114.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/icon/cordova_ios_144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/icon/cordova_ios_144.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/icon/cordova_ios_57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/icon/cordova_ios_57.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/icon/cordova_ios_72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/icon/cordova_ios_72.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/screen/android_hdpi_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/screen/android_hdpi_landscape.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/screen/android_hdpi_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/screen/android_hdpi_portrait.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/screen/android_ldpi_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/screen/android_ldpi_landscape.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/screen/android_ldpi_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/screen/android_ldpi_portrait.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/screen/android_mdpi_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/screen/android_mdpi_landscape.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/screen/android_mdpi_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/screen/android_mdpi_portrait.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/screen/android_xhdpi_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/screen/android_xhdpi_landscape.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/screen/android_xhdpi_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/screen/android_xhdpi_portrait.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/screen/blackberry_transparent_300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/screen/blackberry_transparent_300.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/screen/blackberry_transparent_400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/screen/blackberry_transparent_400.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/screen/ipad_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/screen/ipad_landscape.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/screen/ipad_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/screen/ipad_portrait.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/screen/ipad_retina_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/screen/ipad_retina_landscape.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/screen/ipad_retina_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/screen/ipad_retina_portrait.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/screen/iphone_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/screen/iphone_landscape.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/screen/iphone_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/screen/iphone_portrait.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/screen/iphone_retina_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/screen/iphone_retina_landscape.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/screen/iphone_retina_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/screen/iphone_retina_portrait.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/res/screen/windows_phone_portrait.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/res/screen/windows_phone_portrait.jpg -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/GitHub_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/GitHub_Logo.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/banner.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/bg-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/bg-dark.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/bg-red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/bg-red.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/bg.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/btn-grey-hvr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/btn-grey-hvr.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/btn-grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/btn-grey.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/btn-pink-hvr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/btn-pink-hvr.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/btn-pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/btn-pink.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/glyphicons_019_cogwheel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/glyphicons_019_cogwheel.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/glyphicons_163_iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/glyphicons_163_iphone.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/glyphicons_232_cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/glyphicons_232_cloud.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/glyphicons_351_book_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/glyphicons_351_book_open.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/jdf_logo_450px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/jdf_logo_450px.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/jdf_mark_100px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/jdf_mark_100px.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/jdf_mark_50px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/jdf_mark_50px.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/jdf_mark_75px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/jdf_mark_75px.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/logo.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/nav-bg-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/nav-bg-dark.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/nav-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/nav-bg.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/rhjb_eap_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/rhjb_eap_logo.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/img/splash-ticketmonster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/webapp/resources/img/splash-ticketmonster.png -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/js/app/aggregator/desktop.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * A module for the router of the desktop application 5 | */ 6 | define("router", [ 7 | 'angular', 8 | 'angularRoute', 9 | 'angularResource', 10 | 'app/home/view', 11 | 'app/events/eventsView', 12 | 'app/venues/venuesView', 13 | 'app/eventDetail/eventDetailView', 14 | 'app/venueDetail/venueDetailView', 15 | 'app/booking/view', 16 | 'app/monitor/monitor' 17 | ],function (angular) { 18 | 19 | return angular.module('ticketMonster', ['ngRoute', 20 | 'ngResource', 21 | 'ticketMonster.api', 22 | 'ticketMonster.homeView', 23 | 'ticketMonster.eventsView', 24 | 'ticketMonster.venuesView', 25 | 'ticketMonster.eventDetailView', 26 | 'ticketMonster.venueDetailView', 27 | 'ticketMonster.bookingView', 28 | 'ticketMonster.monitorView']) 29 | .config(['$routeProvider', function($routeProvider) { 30 | $routeProvider 31 | .otherwise({redirectTo: '/'}); 32 | }]); 33 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/js/app/aggregator/mobile.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * A module for the router of the desktop application 5 | */ 6 | define("router", [ 7 | 'angular', 8 | 'angularRoute', 9 | 'angularResource', 10 | 'angularTouch', 11 | 'app/home/view', 12 | 'app/events/eventsView', 13 | 'app/venues/venuesView', 14 | 'app/eventDetail/eventDetailView', 15 | 'app/venueDetail/venueDetailView', 16 | 'app/booking/view', 17 | 'app/monitor/monitor' 18 | ],function (angular) { 19 | 20 | return angular.module('ticketMonster', ['ngRoute', 21 | 'ngResource', 22 | 'ngTouch', 23 | 'ticketMonster.api', 24 | 'ticketMonster.homeView', 25 | 'ticketMonster.eventsView', 26 | 'ticketMonster.venuesView', 27 | 'ticketMonster.eventDetailView', 28 | 'ticketMonster.venueDetailView', 29 | 'ticketMonster.bookingView', 30 | 'ticketMonster.monitorView']) 31 | .config(['$routeProvider', function($routeProvider) { 32 | $routeProvider 33 | .otherwise({redirectTo: '/'}); 34 | }]); 35 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/js/app/components/components.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | define([ 3 | 'angular', 4 | 'bootstrap' 5 | ], function (angular) { 6 | angular.module('ticketMonster.ui.components',[]) 7 | .directive('menuPopover', function () { 8 | return { 9 | restrict: 'A', 10 | template: '', 11 | link: function (scope, el, attrs) { 12 | if (!Modernizr.touch) { 13 | $(el).popover({ 14 | trigger: 'hover', 15 | container: '#content', 16 | content: attrs.content, 17 | title: attrs.originalTitle 18 | }).data('bs.popover') 19 | .tip() 20 | .addClass('visible-lg') 21 | .addClass('visible-md'); 22 | } 23 | } 24 | }; 25 | }); 26 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/js/app/home/view.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | define([ 3 | 'angular', 4 | 'angularRoute' 5 | ], function(angular) { 6 | angular.module('ticketMonster.homeView', ['ngRoute']) 7 | .config(['$routeProvider', function($routeProvider) { 8 | $routeProvider.when('/', { 9 | templateUrl: 'resources/js/app/home/home.html', 10 | controller: 'HomeController' 11 | }); 12 | }]) 13 | .controller('HomeController', [function() { 14 | 15 | }]); 16 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/js/configurations/hybrid.js: -------------------------------------------------------------------------------- 1 | // override configuration for RESTful services 2 | var TicketMonster = { 3 | config:{ 4 | baseRESTUrl:"http://ticketmonster-jdf.rhcloud.com/" 5 | } 6 | }; 7 | 8 | require(['../../../cordova'], function() { 9 | 10 | var bootstrap = { 11 | initialize: function() { 12 | document.addEventListener('deviceready', this.onDeviceReady, false); 13 | }, 14 | onDeviceReady: function() { 15 | // Detect if iOS 7 or higher and disable overlaying the status bar 16 | if(window.device && window.device.platform.toLowerCase() == "ios" && 17 | parseFloat(window.device.version) >= 7.0) { 18 | StatusBar.overlaysWebView(false); 19 | StatusBar.styleDefault(); 20 | StatusBar.backgroundColorByHexString("#ccc"); 21 | } 22 | // Load the mobile module 23 | require (["mobile"]); 24 | } 25 | }; 26 | 27 | bootstrap.initialize(); 28 | }); -------------------------------------------------------------------------------- /monolith/src/main/webapp/resources/js/configurations/loader.js: -------------------------------------------------------------------------------- 1 | //detect the appropriate module to load 2 | define(function () { 3 | 4 | /* 5 | A simple check on the client. For touch devices or small-resolution screens) 6 | show the mobile client. By enabling the mobile client on a small-resolution screen 7 | we allow for testing outside a mobile device (like for example the Mobile Browser 8 | simulator in JBoss Tools and JBoss Developer Studio). 9 | */ 10 | 11 | var environment; 12 | 13 | if (document.URL.indexOf("mobileapp.html") > -1) { 14 | environment = "hybrid"; 15 | } 16 | else if (Modernizr.touch || Modernizr.mq("only all and (max-width: 768px)")) { 17 | environment = "mobile"; 18 | } else { 19 | environment = "desktop"; 20 | } 21 | 22 | require([environment]); 23 | }); -------------------------------------------------------------------------------- /monolith/src/main/wf-standalone/module/module.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /monolith/src/main/wf-standalone/module/mysql-connector-java-5.1.38.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/monolith/src/main/wf-standalone/module/mysql-connector-java-5.1.38.jar -------------------------------------------------------------------------------- /monolith/src/test/java/org/jboss/examples/ticketmonster/test/TicketMonsterDeployment.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.test; 2 | 3 | import org.jboss.examples.ticketmonster.util.Resources; 4 | import org.jboss.shrinkwrap.api.ShrinkWrap; 5 | import org.jboss.shrinkwrap.api.asset.EmptyAsset; 6 | import org.jboss.shrinkwrap.api.spec.WebArchive; 7 | 8 | public class TicketMonsterDeployment { 9 | 10 | public static WebArchive deployment() { 11 | return ShrinkWrap 12 | .create(WebArchive.class, "test.war") 13 | .addPackage(Resources.class.getPackage()) 14 | .addAsResource("META-INF/test-persistence.xml", "META-INF/persistence.xml") 15 | .addAsResource("import.sql") 16 | .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml") 17 | // Deploy our test datasource 18 | .addAsWebInfResource("test-ds.xml"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /monolith/src/test/java/org/jboss/examples/ticketmonster/test/rest/RESTDeployment.java: -------------------------------------------------------------------------------- 1 | package org.jboss.examples.ticketmonster.test.rest; 2 | 3 | import org.jboss.examples.ticketmonster.model.Booking; 4 | import org.jboss.examples.ticketmonster.rest.BaseEntityService; 5 | import org.jboss.examples.ticketmonster.rest.dto.VenueDTO; 6 | import org.jboss.examples.ticketmonster.service.*; 7 | import org.jboss.examples.ticketmonster.test.TicketMonsterDeployment; 8 | import org.jboss.shrinkwrap.api.spec.WebArchive; 9 | 10 | public class RESTDeployment { 11 | 12 | public static WebArchive deployment() { 13 | 14 | 15 | return TicketMonsterDeployment.deployment() 16 | .addPackage(Booking.class.getPackage()) 17 | .addPackage(BaseEntityService.class.getPackage()) 18 | .addPackage(VenueDTO.class.getPackage()) 19 | .addPackage(SeatAllocationService.class.getPackage()) 20 | .addClass(AllocatedSeats.class) 21 | .addClass(MediaPath.class) 22 | .addClass(MediaManager.class); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /orders-service/Readme.md: -------------------------------------------------------------------------------- 1 | Run mysql database by following instructiosn in [the mysql docs](./docs/mysql.md) 2 | 3 | Then build the project with mysql support: 4 | 5 | ``` 6 | mvn clean install -Pmysql 7 | ``` 8 | 9 | Or run with spring boot: 10 | 11 | ``` 12 | mvn -Pmysql spring-boot:run -Dspring.profiles.active=mysql 13 | ``` 14 | 15 | 16 | Or to build for kubernetes (and skip Integration tests) 17 | 18 | ``` 19 | mvn clean install -Pmysql,kubernetes 20 | ``` 21 | 22 | To build the docker image: 23 | 24 | ``` 25 | mvn clean install -Pmysql,kubernetes fabric8:build 26 | ``` 27 | 28 | 29 | A curl command you can use to test everything: 30 | 31 | ``` 32 | curl -X POST -H "Content-Type: application/json" -d "{\"ticketRequests\":[{\"ticketPrice\":4,\"quantity\":3}],\"email\":\"foo@bar.coom\",\"performance\":1}" http://localhost:8080/rest/bookings 33 | ``` 34 | 35 | 36 | To connect to mysql: 37 | 38 | Port forward the mysql pods locally (eg): 39 | 40 | ``` 41 | kubectl port-forward mysql-backend-4085635837-kxfc6 3306:3306 42 | ``` 43 | 44 | Login with a mysql client: 45 | 46 | ``` 47 | mysql -h 127.0.0.1 --port 3306 -u ticket -pmonster 48 | ``` 49 | -------------------------------------------------------------------------------- /orders-service/build-docker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | mvn clean install -Pmysql,kubernetes -DskipITs=true fabric8:build -------------------------------------------------------------------------------- /orders-service/docs/hoverfly-capture.md: -------------------------------------------------------------------------------- 1 | To use hoverfly to capture the monolith's orders website traffic, first we need to deploy ticket monster (at this point, we've deployed it into Kubernetes/OpenShift with UI and backends split out. From our browser if we navigate to the UI, we can then set up a proxy (hoverlfy) to capture traffic and build tests around that. 2 | 3 | startup hoverfly in capture mode: 4 | 5 | > hoverctl start 6 | > hoverctl mode capture 7 | 8 | Let's capture only the requests made to the rest endpoints 9 | 10 | > hoverctl destination "rest" 11 | 12 | Now configure your browser to proxy to localhost:8500 13 | 14 | Note: you can follow the hoverfly logs to make sure things are getting captured: 15 | 16 | > hoverctl logs --follow 17 | 18 | Now go to your browser and start exercising all of the functions of the ordering process. 19 | 20 | 21 | > hoverctl export simulation.json 22 | 23 | 24 | -------------------------------------------------------------------------------- /orders-service/docs/json-schema.md: -------------------------------------------------------------------------------- 1 | You can copy the JSON instance from the simulation in the hoverfly export and convert to JSON schema so you can test the structure of the output. Use jsonschema.net tools to create a json schema to be used in tests: 2 | 3 | https://jsonschema.net/#/editor -------------------------------------------------------------------------------- /orders-service/docs/mysql.md: -------------------------------------------------------------------------------- 1 | Start up a database: 2 | 3 | ``` 4 | docker run -d --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin -e MYSQL_PASSWORD=monster -e MYSQL_USER=ticket -e MYSQL_DATABASE=ticketmonster mysql:5.7 5 | ``` 6 | 7 | Connect to it via client: 8 | 9 | ``` 10 | docker run -it --link some-mysql:mysql --rm mysql:5.7 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uticket -pmonster ticketmonster' 11 | ``` 12 | 13 | 14 | Login locally/natively 15 | If you port forward the mysql ports to the docker container, you can run a mysql client locally: 16 | 17 | 18 | ``` 19 | mysql ticketmonster -h127.0.0.1 -uticket -pmonster 20 | ``` 21 | 22 | You will need to set up the databases: 23 | 24 | ``` 25 | mysql ticketmonster -h127.0.0.1 -uticket -pmonster < ./scripts/grants.sql 26 | mysql ticketmonster -h127.0.0.1 -uticket -pmonster < ./scripts/orders.sql 27 | mysql ticketmonster -h127.0.0.1 -uticket -pmonster < ./scripts/ticketmonster.sql 28 | ``` 29 | 30 | An simple script to port forward minikube: 31 | 32 | ``` 33 | #!/bin/sh 34 | 35 | port=${1:=3306} 36 | minikube ssh -- -vnNTL *:$port:$(minikube ip):$port 37 | ``` 38 | -------------------------------------------------------------------------------- /orders-service/push-docker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker push ceposta/orders-service:latest -------------------------------------------------------------------------------- /orders-service/scripts/grants.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE IF NOT EXISTS orders; 2 | CREATE DATABASE IF NOT EXISTS ticketmonster; 3 | 4 | GRANT ALL PRIVILEGES ON `ticketmonster`.* TO 'ticket'@'%'; 5 | GRANT ALL PRIVILEGES ON `orders`.* TO 'ticket'@'%'; -------------------------------------------------------------------------------- /orders-service/src/main/fabric8/deployment.yml: -------------------------------------------------------------------------------- 1 | spec: 2 | template: 3 | spec: 4 | containers: 5 | - env: 6 | - name: SPRING_PROFILES_ACTIVE 7 | value: "kube" -------------------------------------------------------------------------------- /orders-service/src/main/java/org/ticketmonster/orders/booking/AllocatedSeats.java: -------------------------------------------------------------------------------- 1 | package org.ticketmonster.orders.booking; 2 | 3 | 4 | import org.ticketmonster.orders.domain.Seat; 5 | import org.ticketmonster.orders.domain.SectionAllocation; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * A transient object which represents a collection of pre-allocated seats 11 | * 12 | * @author Marius Bogoevici 13 | */ 14 | public class AllocatedSeats { 15 | 16 | private final SectionAllocation sectionAllocation; 17 | 18 | private final List seats; 19 | 20 | public AllocatedSeats(SectionAllocation sectionAllocation, List seats) { 21 | this.sectionAllocation = sectionAllocation; 22 | this.seats = seats; 23 | } 24 | 25 | public SectionAllocation getSectionAllocation() { 26 | return sectionAllocation; 27 | } 28 | 29 | public List getSeats() { 30 | return seats; 31 | } 32 | 33 | public void markOccupied() { 34 | sectionAllocation.markOccupied(seats); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /orders-service/src/main/java/org/ticketmonster/orders/booking/RestServiceException.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | *

9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | *

11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package org.ticketmonster.orders.booking; 18 | 19 | /** 20 | * Created by ceposta 21 | * docker build -t ceposta/tm-ui:monolith . 22 | 23 | Run in kubernetes 24 | 25 | > kubectl run tm-ui --image=ceposta/tm-ui:monolith --port=80 26 | 27 | Or using the resource files in the [deployment](../deployment/kubernetes/core/frontend/) folder. 28 | -------------------------------------------------------------------------------- /tm-ui-v1/build-docker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker build -t ceposta/tm-ui:monolith . -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/admin/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/admin/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/admin/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/admin/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/img/forge-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/admin/img/forge-logo.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/scripts/controllers/flashController.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ticketmonster').controller('FlashController', ['$scope','flash', function ($scope, flash) { 4 | $scope.flash = flash; 5 | $scope.showAlert = false; 6 | 7 | $scope.$watch('flash.getMessage()', function(newVal) { 8 | var message = newVal; 9 | if(message && message.text) { 10 | $scope.showAlert = message.text.length > 0; 11 | } else { 12 | $scope.showAlert = false; 13 | } 14 | }); 15 | 16 | $scope.hideAlert = function() { 17 | $scope.showAlert = false; 18 | } 19 | }]); 20 | -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/scripts/controllers/newEventCategoryController.js: -------------------------------------------------------------------------------- 1 | 2 | angular.module('ticketmonster').controller('NewEventCategoryController', function ($scope, $location, locationParser, flash, EventCategoryResource ) { 3 | $scope.disabled = false; 4 | $scope.$location = $location; 5 | $scope.eventCategory = $scope.eventCategory || {}; 6 | 7 | 8 | $scope.save = function() { 9 | var successCallback = function(data,responseHeaders){ 10 | var id = locationParser(responseHeaders); 11 | flash.setMessage({'type':'success','text':'The eventCategory was created successfully.'}); 12 | $location.path('/EventCategories'); 13 | }; 14 | var errorCallback = function(response) { 15 | if(response && response.data && response.data.message) { 16 | flash.setMessage({'type': 'error', 'text': response.data.message}, true); 17 | } else { 18 | flash.setMessage({'type': 'error', 'text': 'Something broke. Retry, or cancel and start afresh.'}, true); 19 | } 20 | }; 21 | EventCategoryResource.save($scope.eventCategory, successCallback, errorCallback); 22 | }; 23 | 24 | $scope.cancel = function() { 25 | $location.path("/EventCategories"); 26 | }; 27 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/scripts/filters/startFromFilter.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ticketmonster').filter('startFrom', function() { 4 | return function(input, start) { 5 | start = +start; //parse to int 6 | return input.slice(start); 7 | }; 8 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/scripts/offcanvas.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function() { 2 | $('[data-toggle=offcanvas]').click(function() { 3 | $('.row-offcanvas').toggleClass('active'); 4 | }); 5 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/scripts/services/BookingFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('BookingResource', function($resource){ 2 | var resource = $resource('../rest/forge/bookings/:BookingId',{BookingId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/scripts/services/EventCategoryFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('EventCategoryResource', function($resource){ 2 | var resource = $resource('../rest/eventcategories/:EventCategoryId',{EventCategoryId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/scripts/services/EventFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('EventResource', function($resource){ 2 | var resource = $resource('../rest/forge/events/:EventId',{EventId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/scripts/services/MediaItemFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('MediaItemResource', function($resource){ 2 | var resource = $resource('../rest/mediaitems/:MediaItemId',{MediaItemId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/scripts/services/PerformanceFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('PerformanceResource', function($resource){ 2 | var resource = $resource('../rest/performances/:PerformanceId',{PerformanceId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/scripts/services/SectionAllocationFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('SectionAllocationResource', function($resource){ 2 | var resource = $resource('../rest/sectionallocations/:SectionAllocationId',{SectionAllocationId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/scripts/services/SectionFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('SectionResource', function($resource){ 2 | var resource = $resource('../rest/sections/:SectionId',{SectionId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/scripts/services/ShowFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('ShowResource', function($resource){ 2 | var resource = $resource('../rest/forge/shows/:ShowId',{ShowId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/scripts/services/TicketCategoryFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('TicketCategoryResource', function($resource){ 2 | var resource = $resource('../rest/ticketcategories/:TicketCategoryId',{TicketCategoryId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/scripts/services/TicketFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('TicketResource', function($resource){ 2 | var resource = $resource('../rest/tickets/:TicketId',{TicketId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/scripts/services/TicketPriceFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('TicketPriceResource', function($resource){ 2 | var resource = $resource('../rest/ticketprices/:TicketPriceId',{TicketPriceId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/scripts/services/VenueFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('VenueResource', function($resource){ 2 | var resource = $resource('../rest/forge/venues/:VenueId',{VenueId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/scripts/services/flash.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ticketmonster').factory('flash', ['$rootScope', function ($rootScope) { 4 | var messages = []; 5 | var currentMessage = {}; 6 | 7 | $rootScope.$on('$routeChangeSuccess', function() { 8 | currentMessage = messages.shift() || {}; 9 | }); 10 | 11 | return { 12 | getMessage: function () { 13 | return currentMessage; 14 | }, 15 | setMessage: function(message, pop) { 16 | switch(message.type) { 17 | case "error" : message.cssClass = "danger"; break; 18 | case "success" : message.cssClass = "success"; break; 19 | case "info" : message.cssClass = "info"; break; 20 | case "warning" : message.cssClass = "warning"; break; 21 | } 22 | messages.push(message); 23 | if(pop) { 24 | currentMessage = messages.shift() || {}; 25 | } 26 | } 27 | }; 28 | }]); 29 | -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/scripts/services/locationParser.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').value('locationParser', function(responseHeaders){ 2 | // Get the Location header and parse it. 3 | var locationHeader = responseHeaders('Location'); 4 | var fragments = locationHeader.split('/'); 5 | var id = fragments[fragments.length -1]; 6 | return id; 7 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/admin/views/landing.html: -------------------------------------------------------------------------------- 1 |

2 | Your application is running. 3 |

4 |

5 | Documentation 7 | | Get Excited!

9 | Forge Project
| User 11 | Forums | Report an issue 13 |

-------------------------------------------------------------------------------- /tm-ui-v1/public-html/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/favicon.ico -------------------------------------------------------------------------------- /tm-ui-v1/public-html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Ticket Monster 5 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /tm-ui-v1/public-html/mobileapp.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Ticket Monster 5 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/icon/cordova_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/icon/cordova_128.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/icon/cordova_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/icon/cordova_16.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/icon/cordova_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/icon/cordova_24.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/icon/cordova_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/icon/cordova_256.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/icon/cordova_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/icon/cordova_32.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/icon/cordova_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/icon/cordova_48.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/icon/cordova_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/icon/cordova_512.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/icon/cordova_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/icon/cordova_64.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/icon/cordova_android_36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/icon/cordova_android_36.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/icon/cordova_android_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/icon/cordova_android_48.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/icon/cordova_android_72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/icon/cordova_android_72.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/icon/cordova_android_96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/icon/cordova_android_96.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/icon/cordova_bb_80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/icon/cordova_bb_80.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/icon/cordova_ios_114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/icon/cordova_ios_114.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/icon/cordova_ios_144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/icon/cordova_ios_144.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/icon/cordova_ios_57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/icon/cordova_ios_57.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/icon/cordova_ios_72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/icon/cordova_ios_72.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/screen/android_hdpi_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/screen/android_hdpi_landscape.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/screen/android_hdpi_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/screen/android_hdpi_portrait.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/screen/android_ldpi_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/screen/android_ldpi_landscape.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/screen/android_ldpi_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/screen/android_ldpi_portrait.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/screen/android_mdpi_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/screen/android_mdpi_landscape.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/screen/android_mdpi_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/screen/android_mdpi_portrait.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/screen/android_xhdpi_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/screen/android_xhdpi_landscape.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/screen/android_xhdpi_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/screen/android_xhdpi_portrait.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/screen/blackberry_transparent_300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/screen/blackberry_transparent_300.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/screen/blackberry_transparent_400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/screen/blackberry_transparent_400.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/screen/ipad_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/screen/ipad_landscape.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/screen/ipad_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/screen/ipad_portrait.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/screen/ipad_retina_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/screen/ipad_retina_landscape.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/screen/ipad_retina_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/screen/ipad_retina_portrait.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/screen/iphone_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/screen/iphone_landscape.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/screen/iphone_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/screen/iphone_portrait.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/screen/iphone_retina_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/screen/iphone_retina_landscape.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/screen/iphone_retina_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/screen/iphone_retina_portrait.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/res/screen/windows_phone_portrait.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/res/screen/windows_phone_portrait.jpg -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/GitHub_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/GitHub_Logo.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/banner.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/bg-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/bg-dark.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/bg-red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/bg-red.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/bg.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/btn-grey-hvr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/btn-grey-hvr.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/btn-grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/btn-grey.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/btn-pink-hvr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/btn-pink-hvr.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/btn-pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/btn-pink.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/glyphicons_019_cogwheel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/glyphicons_019_cogwheel.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/glyphicons_163_iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/glyphicons_163_iphone.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/glyphicons_232_cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/glyphicons_232_cloud.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/glyphicons_351_book_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/glyphicons_351_book_open.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/jdf_logo_450px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/jdf_logo_450px.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/jdf_mark_100px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/jdf_mark_100px.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/jdf_mark_50px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/jdf_mark_50px.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/jdf_mark_75px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/jdf_mark_75px.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/logo.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/nav-bg-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/nav-bg-dark.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/nav-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/nav-bg.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/rhjb_eap_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/rhjb_eap_logo.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/img/splash-ticketmonster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v1/public-html/resources/img/splash-ticketmonster.png -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/js/app/aggregator/desktop.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * A module for the router of the desktop application 5 | */ 6 | define("router", [ 7 | 'angular', 8 | 'angularRoute', 9 | 'angularResource', 10 | 'app/home/view', 11 | 'app/events/eventsView', 12 | 'app/venues/venuesView', 13 | 'app/eventDetail/eventDetailView', 14 | 'app/venueDetail/venueDetailView', 15 | 'app/booking/view', 16 | 'app/monitor/monitor' 17 | ],function (angular) { 18 | 19 | return angular.module('ticketMonster', ['ngRoute', 20 | 'ngResource', 21 | 'ticketMonster.api', 22 | 'ticketMonster.homeView', 23 | 'ticketMonster.eventsView', 24 | 'ticketMonster.venuesView', 25 | 'ticketMonster.eventDetailView', 26 | 'ticketMonster.venueDetailView', 27 | 'ticketMonster.bookingView', 28 | 'ticketMonster.monitorView']) 29 | .config(['$routeProvider', function($routeProvider) { 30 | $routeProvider 31 | .otherwise({redirectTo: '/'}); 32 | }]); 33 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/js/app/aggregator/mobile.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * A module for the router of the desktop application 5 | */ 6 | define("router", [ 7 | 'angular', 8 | 'angularRoute', 9 | 'angularResource', 10 | 'angularTouch', 11 | 'app/home/view', 12 | 'app/events/eventsView', 13 | 'app/venues/venuesView', 14 | 'app/eventDetail/eventDetailView', 15 | 'app/venueDetail/venueDetailView', 16 | 'app/booking/view', 17 | 'app/monitor/monitor' 18 | ],function (angular) { 19 | 20 | return angular.module('ticketMonster', ['ngRoute', 21 | 'ngResource', 22 | 'ngTouch', 23 | 'ticketMonster.api', 24 | 'ticketMonster.homeView', 25 | 'ticketMonster.eventsView', 26 | 'ticketMonster.venuesView', 27 | 'ticketMonster.eventDetailView', 28 | 'ticketMonster.venueDetailView', 29 | 'ticketMonster.bookingView', 30 | 'ticketMonster.monitorView']) 31 | .config(['$routeProvider', function($routeProvider) { 32 | $routeProvider 33 | .otherwise({redirectTo: '/'}); 34 | }]); 35 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/js/app/components/components.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | define([ 3 | 'angular', 4 | 'bootstrap' 5 | ], function (angular) { 6 | angular.module('ticketMonster.ui.components',[]) 7 | .directive('menuPopover', function () { 8 | return { 9 | restrict: 'A', 10 | template: '', 11 | link: function (scope, el, attrs) { 12 | if (!Modernizr.touch) { 13 | $(el).popover({ 14 | trigger: 'hover', 15 | container: '#content', 16 | content: attrs.content, 17 | title: attrs.originalTitle 18 | }).data('bs.popover') 19 | .tip() 20 | .addClass('visible-lg') 21 | .addClass('visible-md'); 22 | } 23 | } 24 | }; 25 | }); 26 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/js/app/home/view.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | define([ 3 | 'angular', 4 | 'angularRoute' 5 | ], function(angular) { 6 | angular.module('ticketMonster.homeView', ['ngRoute']) 7 | .config(['$routeProvider', function($routeProvider) { 8 | $routeProvider.when('/', { 9 | templateUrl: 'resources/js/app/home/home.html', 10 | controller: 'HomeController' 11 | }); 12 | }]) 13 | .controller('HomeController', [function() { 14 | 15 | }]); 16 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/js/configurations/hybrid.js: -------------------------------------------------------------------------------- 1 | // override configuration for RESTful services 2 | var TicketMonster = { 3 | config:{ 4 | baseRESTUrl:"http://ticketmonster-jdf.rhcloud.com/" 5 | } 6 | }; 7 | 8 | require(['../../../cordova'], function() { 9 | 10 | var bootstrap = { 11 | initialize: function() { 12 | document.addEventListener('deviceready', this.onDeviceReady, false); 13 | }, 14 | onDeviceReady: function() { 15 | // Detect if iOS 7 or higher and disable overlaying the status bar 16 | if(window.device && window.device.platform.toLowerCase() == "ios" && 17 | parseFloat(window.device.version) >= 7.0) { 18 | StatusBar.overlaysWebView(false); 19 | StatusBar.styleDefault(); 20 | StatusBar.backgroundColorByHexString("#ccc"); 21 | } 22 | // Load the mobile module 23 | require (["mobile"]); 24 | } 25 | }; 26 | 27 | bootstrap.initialize(); 28 | }); -------------------------------------------------------------------------------- /tm-ui-v1/public-html/resources/js/configurations/loader.js: -------------------------------------------------------------------------------- 1 | //detect the appropriate module to load 2 | define(function () { 3 | 4 | /* 5 | A simple check on the client. For touch devices or small-resolution screens) 6 | show the mobile client. By enabling the mobile client on a small-resolution screen 7 | we allow for testing outside a mobile device (like for example the Mobile Browser 8 | simulator in JBoss Tools and JBoss Developer Studio). 9 | */ 10 | 11 | var environment; 12 | 13 | if (document.URL.indexOf("mobileapp.html") > -1) { 14 | environment = "hybrid"; 15 | } 16 | else if (Modernizr.touch || Modernizr.mq("only all and (max-width: 768px)")) { 17 | environment = "mobile"; 18 | } else { 19 | environment = "desktop"; 20 | } 21 | 22 | require([environment]); 23 | }); -------------------------------------------------------------------------------- /tm-ui-v1/push-docker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker push ceposta/tm-ui:monolith -------------------------------------------------------------------------------- /tm-ui-v2/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM httpd:2.4 2 | COPY ./public-html /usr/local/apache2/htdocs/ 3 | COPY httpd.conf /usr/local/apache2/conf/httpd.conf -------------------------------------------------------------------------------- /tm-ui-v2/README.md: -------------------------------------------------------------------------------- 1 | ## Ticket Monster UI 2 | 3 | This proxy helps us keep friendly URLs even when there are composite UIs or composite microservice REST apis 4 | It also helps us avoid tripping the browser Same Origin policy. We use a simple HTTP server (apache) to serve the static content and then use the reverse proxy plugins to proxy REST calls to the appropriate microservice: 5 | 6 | ``` 7 | # proxy for the admin microserivce 8 | ProxyPass "/rest" "http://backend:8080/rest" 9 | ProxyPassReverse "/rest" "http://backend:8080/rest" 10 | ``` 11 | 12 | 13 | ## Running in docker 14 | 15 | The docker image for this project is `ceposta/tm-ui:backend` 16 | 17 | ## Developers: 18 | 19 | Build the docker container: 20 | 21 | > docker build -t ceposta/tm-ui:backend . 22 | 23 | Run in kubernetes 24 | 25 | > kubectl run tm-ui --image=ceposta/tm-ui:backend --port=80 26 | 27 | Or using the resource files in the [deployment](../deployment/kubernetes/core/frontend/) folder. 28 | 29 | -------------------------------------------------------------------------------- /tm-ui-v2/build-docker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker build -t ceposta/tm-ui:backend . -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/admin/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/admin/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/admin/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/admin/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/img/forge-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/admin/img/forge-logo.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/scripts/controllers/flashController.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ticketmonster').controller('FlashController', ['$scope','flash', function ($scope, flash) { 4 | $scope.flash = flash; 5 | $scope.showAlert = false; 6 | 7 | $scope.$watch('flash.getMessage()', function(newVal) { 8 | var message = newVal; 9 | if(message && message.text) { 10 | $scope.showAlert = message.text.length > 0; 11 | } else { 12 | $scope.showAlert = false; 13 | } 14 | }); 15 | 16 | $scope.hideAlert = function() { 17 | $scope.showAlert = false; 18 | } 19 | }]); 20 | -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/scripts/controllers/newEventCategoryController.js: -------------------------------------------------------------------------------- 1 | 2 | angular.module('ticketmonster').controller('NewEventCategoryController', function ($scope, $location, locationParser, flash, EventCategoryResource ) { 3 | $scope.disabled = false; 4 | $scope.$location = $location; 5 | $scope.eventCategory = $scope.eventCategory || {}; 6 | 7 | 8 | $scope.save = function() { 9 | var successCallback = function(data,responseHeaders){ 10 | var id = locationParser(responseHeaders); 11 | flash.setMessage({'type':'success','text':'The eventCategory was created successfully.'}); 12 | $location.path('/EventCategories'); 13 | }; 14 | var errorCallback = function(response) { 15 | if(response && response.data && response.data.message) { 16 | flash.setMessage({'type': 'error', 'text': response.data.message}, true); 17 | } else { 18 | flash.setMessage({'type': 'error', 'text': 'Something broke. Retry, or cancel and start afresh.'}, true); 19 | } 20 | }; 21 | EventCategoryResource.save($scope.eventCategory, successCallback, errorCallback); 22 | }; 23 | 24 | $scope.cancel = function() { 25 | $location.path("/EventCategories"); 26 | }; 27 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/scripts/filters/startFromFilter.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ticketmonster').filter('startFrom', function() { 4 | return function(input, start) { 5 | start = +start; //parse to int 6 | return input.slice(start); 7 | }; 8 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/scripts/offcanvas.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function() { 2 | $('[data-toggle=offcanvas]').click(function() { 3 | $('.row-offcanvas').toggleClass('active'); 4 | }); 5 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/scripts/services/BookingFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('BookingResource', function($resource){ 2 | var resource = $resource('../rest/forge/bookings/:BookingId',{BookingId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/scripts/services/EventCategoryFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('EventCategoryResource', function($resource){ 2 | var resource = $resource('../rest/eventcategories/:EventCategoryId',{EventCategoryId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/scripts/services/EventFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('EventResource', function($resource){ 2 | var resource = $resource('../rest/forge/events/:EventId',{EventId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/scripts/services/MediaItemFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('MediaItemResource', function($resource){ 2 | var resource = $resource('../rest/mediaitems/:MediaItemId',{MediaItemId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/scripts/services/PerformanceFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('PerformanceResource', function($resource){ 2 | var resource = $resource('../rest/performances/:PerformanceId',{PerformanceId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/scripts/services/SectionAllocationFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('SectionAllocationResource', function($resource){ 2 | var resource = $resource('../rest/sectionallocations/:SectionAllocationId',{SectionAllocationId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/scripts/services/SectionFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('SectionResource', function($resource){ 2 | var resource = $resource('../rest/sections/:SectionId',{SectionId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/scripts/services/ShowFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('ShowResource', function($resource){ 2 | var resource = $resource('../rest/forge/shows/:ShowId',{ShowId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/scripts/services/TicketCategoryFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('TicketCategoryResource', function($resource){ 2 | var resource = $resource('../rest/ticketcategories/:TicketCategoryId',{TicketCategoryId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/scripts/services/TicketFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('TicketResource', function($resource){ 2 | var resource = $resource('../rest/tickets/:TicketId',{TicketId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/scripts/services/TicketPriceFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('TicketPriceResource', function($resource){ 2 | var resource = $resource('../rest/ticketprices/:TicketPriceId',{TicketPriceId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/scripts/services/VenueFactory.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').factory('VenueResource', function($resource){ 2 | var resource = $resource('../rest/forge/venues/:VenueId',{VenueId:'@id'},{'queryAll':{method:'GET',isArray:true},'query':{method:'GET',isArray:false},'update':{method:'PUT'}}); 3 | return resource; 4 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/scripts/services/flash.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ticketmonster').factory('flash', ['$rootScope', function ($rootScope) { 4 | var messages = []; 5 | var currentMessage = {}; 6 | 7 | $rootScope.$on('$routeChangeSuccess', function() { 8 | currentMessage = messages.shift() || {}; 9 | }); 10 | 11 | return { 12 | getMessage: function () { 13 | return currentMessage; 14 | }, 15 | setMessage: function(message, pop) { 16 | switch(message.type) { 17 | case "error" : message.cssClass = "danger"; break; 18 | case "success" : message.cssClass = "success"; break; 19 | case "info" : message.cssClass = "info"; break; 20 | case "warning" : message.cssClass = "warning"; break; 21 | } 22 | messages.push(message); 23 | if(pop) { 24 | currentMessage = messages.shift() || {}; 25 | } 26 | } 27 | }; 28 | }]); 29 | -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/scripts/services/locationParser.js: -------------------------------------------------------------------------------- 1 | angular.module('ticketmonster').value('locationParser', function(responseHeaders){ 2 | // Get the Location header and parse it. 3 | var locationHeader = responseHeaders('Location'); 4 | var fragments = locationHeader.split('/'); 5 | var id = fragments[fragments.length -1]; 6 | return id; 7 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/admin/views/landing.html: -------------------------------------------------------------------------------- 1 |

2 | Your application is running. 3 |

4 |

5 | Documentation 7 | | Get Excited!

9 | Forge Project
| User 11 | Forums | Report an issue 13 |

-------------------------------------------------------------------------------- /tm-ui-v2/public-html/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/favicon.ico -------------------------------------------------------------------------------- /tm-ui-v2/public-html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Ticket Monster 5 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /tm-ui-v2/public-html/mobileapp.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Ticket Monster 5 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/icon/cordova_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/icon/cordova_128.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/icon/cordova_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/icon/cordova_16.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/icon/cordova_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/icon/cordova_24.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/icon/cordova_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/icon/cordova_256.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/icon/cordova_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/icon/cordova_32.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/icon/cordova_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/icon/cordova_48.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/icon/cordova_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/icon/cordova_512.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/icon/cordova_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/icon/cordova_64.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/icon/cordova_android_36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/icon/cordova_android_36.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/icon/cordova_android_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/icon/cordova_android_48.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/icon/cordova_android_72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/icon/cordova_android_72.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/icon/cordova_android_96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/icon/cordova_android_96.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/icon/cordova_bb_80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/icon/cordova_bb_80.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/icon/cordova_ios_114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/icon/cordova_ios_114.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/icon/cordova_ios_144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/icon/cordova_ios_144.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/icon/cordova_ios_57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/icon/cordova_ios_57.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/icon/cordova_ios_72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/icon/cordova_ios_72.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/screen/android_hdpi_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/screen/android_hdpi_landscape.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/screen/android_hdpi_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/screen/android_hdpi_portrait.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/screen/android_ldpi_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/screen/android_ldpi_landscape.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/screen/android_ldpi_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/screen/android_ldpi_portrait.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/screen/android_mdpi_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/screen/android_mdpi_landscape.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/screen/android_mdpi_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/screen/android_mdpi_portrait.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/screen/android_xhdpi_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/screen/android_xhdpi_landscape.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/screen/android_xhdpi_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/screen/android_xhdpi_portrait.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/screen/blackberry_transparent_300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/screen/blackberry_transparent_300.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/screen/blackberry_transparent_400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/screen/blackberry_transparent_400.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/screen/ipad_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/screen/ipad_landscape.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/screen/ipad_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/screen/ipad_portrait.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/screen/ipad_retina_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/screen/ipad_retina_landscape.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/screen/ipad_retina_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/screen/ipad_retina_portrait.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/screen/iphone_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/screen/iphone_landscape.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/screen/iphone_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/screen/iphone_portrait.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/screen/iphone_retina_landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/screen/iphone_retina_landscape.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/screen/iphone_retina_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/screen/iphone_retina_portrait.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/res/screen/windows_phone_portrait.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/res/screen/windows_phone_portrait.jpg -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/GitHub_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/GitHub_Logo.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/banner.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/bg-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/bg-dark.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/bg-red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/bg-red.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/bg.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/btn-grey-hvr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/btn-grey-hvr.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/btn-grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/btn-grey.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/btn-pink-hvr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/btn-pink-hvr.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/btn-pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/btn-pink.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/glyphicons_019_cogwheel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/glyphicons_019_cogwheel.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/glyphicons_163_iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/glyphicons_163_iphone.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/glyphicons_232_cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/glyphicons_232_cloud.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/glyphicons_351_book_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/glyphicons_351_book_open.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/jdf_logo_450px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/jdf_logo_450px.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/jdf_mark_100px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/jdf_mark_100px.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/jdf_mark_50px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/jdf_mark_50px.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/jdf_mark_75px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/jdf_mark_75px.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/logo.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/nav-bg-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/nav-bg-dark.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/nav-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/nav-bg.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/rhjb_eap_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/rhjb_eap_logo.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/img/splash-ticketmonster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ticket-monster-msa/monolith/343e998d193e09d7a9366a10d4332ea80f6c66a5/tm-ui-v2/public-html/resources/img/splash-ticketmonster.png -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/js/app/aggregator/desktop.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * A module for the router of the desktop application 5 | */ 6 | define("router", [ 7 | 'angular', 8 | 'angularRoute', 9 | 'angularResource', 10 | 'app/home/view', 11 | 'app/events/eventsView', 12 | 'app/venues/venuesView', 13 | 'app/eventDetail/eventDetailView', 14 | 'app/venueDetail/venueDetailView', 15 | 'app/booking/view', 16 | 'app/monitor/monitor' 17 | ],function (angular) { 18 | 19 | return angular.module('ticketMonster', ['ngRoute', 20 | 'ngResource', 21 | 'ticketMonster.api', 22 | 'ticketMonster.homeView', 23 | 'ticketMonster.eventsView', 24 | 'ticketMonster.venuesView', 25 | 'ticketMonster.eventDetailView', 26 | 'ticketMonster.venueDetailView', 27 | 'ticketMonster.bookingView', 28 | 'ticketMonster.monitorView']) 29 | .config(['$routeProvider', function($routeProvider) { 30 | $routeProvider 31 | .otherwise({redirectTo: '/'}); 32 | }]); 33 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/js/app/aggregator/mobile.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * A module for the router of the desktop application 5 | */ 6 | define("router", [ 7 | 'angular', 8 | 'angularRoute', 9 | 'angularResource', 10 | 'angularTouch', 11 | 'app/home/view', 12 | 'app/events/eventsView', 13 | 'app/venues/venuesView', 14 | 'app/eventDetail/eventDetailView', 15 | 'app/venueDetail/venueDetailView', 16 | 'app/booking/view', 17 | 'app/monitor/monitor' 18 | ],function (angular) { 19 | 20 | return angular.module('ticketMonster', ['ngRoute', 21 | 'ngResource', 22 | 'ngTouch', 23 | 'ticketMonster.api', 24 | 'ticketMonster.homeView', 25 | 'ticketMonster.eventsView', 26 | 'ticketMonster.venuesView', 27 | 'ticketMonster.eventDetailView', 28 | 'ticketMonster.venueDetailView', 29 | 'ticketMonster.bookingView', 30 | 'ticketMonster.monitorView']) 31 | .config(['$routeProvider', function($routeProvider) { 32 | $routeProvider 33 | .otherwise({redirectTo: '/'}); 34 | }]); 35 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/js/app/components/components.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | define([ 3 | 'angular', 4 | 'bootstrap' 5 | ], function (angular) { 6 | angular.module('ticketMonster.ui.components',[]) 7 | .directive('menuPopover', function () { 8 | return { 9 | restrict: 'A', 10 | template: '', 11 | link: function (scope, el, attrs) { 12 | if (!Modernizr.touch) { 13 | $(el).popover({ 14 | trigger: 'hover', 15 | container: '#content', 16 | content: attrs.content, 17 | title: attrs.originalTitle 18 | }).data('bs.popover') 19 | .tip() 20 | .addClass('visible-lg') 21 | .addClass('visible-md'); 22 | } 23 | } 24 | }; 25 | }); 26 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/js/app/home/view.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | define([ 3 | 'angular', 4 | 'angularRoute' 5 | ], function(angular) { 6 | angular.module('ticketMonster.homeView', ['ngRoute']) 7 | .config(['$routeProvider', function($routeProvider) { 8 | $routeProvider.when('/', { 9 | templateUrl: 'resources/js/app/home/home.html', 10 | controller: 'HomeController' 11 | }); 12 | }]) 13 | .controller('HomeController', [function() { 14 | 15 | }]); 16 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/js/configurations/hybrid.js: -------------------------------------------------------------------------------- 1 | // override configuration for RESTful services 2 | var TicketMonster = { 3 | config:{ 4 | baseRESTUrl:"http://ticketmonster-jdf.rhcloud.com/" 5 | } 6 | }; 7 | 8 | require(['../../../cordova'], function() { 9 | 10 | var bootstrap = { 11 | initialize: function() { 12 | document.addEventListener('deviceready', this.onDeviceReady, false); 13 | }, 14 | onDeviceReady: function() { 15 | // Detect if iOS 7 or higher and disable overlaying the status bar 16 | if(window.device && window.device.platform.toLowerCase() == "ios" && 17 | parseFloat(window.device.version) >= 7.0) { 18 | StatusBar.overlaysWebView(false); 19 | StatusBar.styleDefault(); 20 | StatusBar.backgroundColorByHexString("#ccc"); 21 | } 22 | // Load the mobile module 23 | require (["mobile"]); 24 | } 25 | }; 26 | 27 | bootstrap.initialize(); 28 | }); -------------------------------------------------------------------------------- /tm-ui-v2/public-html/resources/js/configurations/loader.js: -------------------------------------------------------------------------------- 1 | //detect the appropriate module to load 2 | define(function () { 3 | 4 | /* 5 | A simple check on the client. For touch devices or small-resolution screens) 6 | show the mobile client. By enabling the mobile client on a small-resolution screen 7 | we allow for testing outside a mobile device (like for example the Mobile Browser 8 | simulator in JBoss Tools and JBoss Developer Studio). 9 | */ 10 | 11 | var environment; 12 | 13 | if (document.URL.indexOf("mobileapp.html") > -1) { 14 | environment = "hybrid"; 15 | } 16 | else if (Modernizr.touch || Modernizr.mq("only all and (max-width: 768px)")) { 17 | environment = "mobile"; 18 | } else { 19 | environment = "desktop"; 20 | } 21 | 22 | require([environment]); 23 | }); -------------------------------------------------------------------------------- /tm-ui-v2/push-docker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker push ceposta/tm-ui:backend --------------------------------------------------------------------------------