├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── addServer.py ├── deploy_release.sh ├── examples ├── README.md ├── books-example │ ├── README.md │ ├── pom.xml │ ├── screenshot.png │ └── src │ │ ├── main │ │ ├── java │ │ │ └── de │ │ │ │ └── saxsys │ │ │ │ └── mvvmfx │ │ │ │ └── examples │ │ │ │ └── books │ │ │ │ ├── App.java │ │ │ │ ├── BookListItemView.fxml │ │ │ │ ├── BookListItemView.java │ │ │ │ ├── BookListItemViewModel.java │ │ │ │ ├── MainView.fxml │ │ │ │ ├── MainView.java │ │ │ │ ├── MainViewModel.java │ │ │ │ ├── backend │ │ │ │ ├── Book.java │ │ │ │ ├── Error.java │ │ │ │ ├── HalUtil.java │ │ │ │ ├── LibraryService.java │ │ │ │ ├── LibraryServiceImpl.java │ │ │ │ └── LibraryServiceMockImpl.java │ │ │ │ └── style.css │ │ └── resources │ │ │ └── logback.xml │ │ └── test │ │ └── java │ │ └── de │ │ └── saxsys │ │ └── mvvmfx │ │ └── examples │ │ └── books │ │ ├── BooksExampleIT.java │ │ ├── MainViewModelTest.java │ │ └── backend │ │ └── LibraryServiceMockTest.java ├── contacts-example │ ├── README.md │ ├── about.png │ ├── address_form.png │ ├── app.png │ ├── contact_form.png │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── de │ │ │ │ └── saxsys │ │ │ │ └── mvvmfx │ │ │ │ └── examples │ │ │ │ └── contacts │ │ │ │ ├── App.java │ │ │ │ ├── config │ │ │ │ └── ResourceProvider.java │ │ │ │ ├── events │ │ │ │ ├── ContactsUpdatedEvent.java │ │ │ │ ├── TriggerShutdownEvent.java │ │ │ │ └── package-info.java │ │ │ │ ├── model │ │ │ │ ├── Address.java │ │ │ │ ├── Contact.java │ │ │ │ ├── ContactFactory.java │ │ │ │ ├── Countries.java │ │ │ │ ├── Country.java │ │ │ │ ├── Identity.java │ │ │ │ ├── InmemoryRepository.java │ │ │ │ ├── Repository.java │ │ │ │ ├── Subdivision.java │ │ │ │ └── countries │ │ │ │ │ ├── CountrySelector.java │ │ │ │ │ ├── DataFxCountrySelector.java │ │ │ │ │ ├── DomCountrySelector.java │ │ │ │ │ ├── ISO3166_2_CountryEntity.java │ │ │ │ │ ├── ISO3166_2_Entries.java │ │ │ │ │ ├── ISO3166_2_EntryEntity.java │ │ │ │ │ ├── ISO3166_2_SubsetEntity.java │ │ │ │ │ └── JAXBCountrySelector.java │ │ │ │ ├── ui │ │ │ │ ├── about │ │ │ │ │ ├── AboutAuthorView.fxml │ │ │ │ │ ├── AboutAuthorView.java │ │ │ │ │ ├── AboutAuthorViewModel.java │ │ │ │ │ ├── AboutView.fxml │ │ │ │ │ ├── AboutView.java │ │ │ │ │ ├── AboutViewModel.java │ │ │ │ │ └── profile_manuel.png │ │ │ │ ├── addcontact │ │ │ │ │ ├── AddContactDialogView.fxml │ │ │ │ │ ├── AddContactDialogView.java │ │ │ │ │ └── AddContactDialogViewModel.java │ │ │ │ ├── addressform │ │ │ │ │ ├── AddressFormView.fxml │ │ │ │ │ ├── AddressFormView.java │ │ │ │ │ └── AddressFormViewModel.java │ │ │ │ ├── contactdialog │ │ │ │ │ ├── ContactDialogView.fxml │ │ │ │ │ ├── ContactDialogView.java │ │ │ │ │ └── ContactDialogViewModel.java │ │ │ │ ├── contactform │ │ │ │ │ ├── ContactFormView.fxml │ │ │ │ │ ├── ContactFormView.java │ │ │ │ │ └── ContactFormViewModel.java │ │ │ │ ├── detail │ │ │ │ │ ├── DetailView.fxml │ │ │ │ │ ├── DetailView.java │ │ │ │ │ └── DetailViewModel.java │ │ │ │ ├── editcontact │ │ │ │ │ ├── EditContactDialogView.fxml │ │ │ │ │ ├── EditContactDialogView.java │ │ │ │ │ └── EditContactDialogViewModel.java │ │ │ │ ├── main │ │ │ │ │ ├── MainView.fxml │ │ │ │ │ ├── MainView.java │ │ │ │ │ └── MainViewModel.java │ │ │ │ ├── master │ │ │ │ │ ├── MasterTableViewModel.java │ │ │ │ │ ├── MasterView.fxml │ │ │ │ │ ├── MasterView.java │ │ │ │ │ └── MasterViewModel.java │ │ │ │ ├── menu │ │ │ │ │ ├── MenuView.fxml │ │ │ │ │ ├── MenuView.java │ │ │ │ │ └── MenuViewModel.java │ │ │ │ ├── scopes │ │ │ │ │ ├── ContactDialogScope.java │ │ │ │ │ └── MasterDetailScope.java │ │ │ │ ├── toolbar │ │ │ │ │ ├── ToolbarView.fxml │ │ │ │ │ ├── ToolbarView.java │ │ │ │ │ └── ToolbarViewModel.java │ │ │ │ └── validators │ │ │ │ │ ├── BirthdayValidator.java │ │ │ │ │ ├── EmailValidator.java │ │ │ │ │ └── PhoneValidator.java │ │ │ │ └── util │ │ │ │ ├── CentralClock.java │ │ │ │ └── DialogHelper.java │ │ └── resources │ │ │ ├── META-INF │ │ │ └── beans.xml │ │ │ ├── contacts.css │ │ │ ├── countries │ │ │ ├── iso_3166.xml │ │ │ ├── iso_3166_2.xml │ │ │ └── readme.md │ │ │ ├── default_de.properties │ │ │ ├── default_en.properties │ │ │ ├── logback.xml │ │ │ ├── menu_de.properties │ │ │ └── menu_en.properties │ │ └── test │ │ ├── java │ │ └── de │ │ │ └── saxsys │ │ │ └── mvvmfx │ │ │ └── examples │ │ │ └── contacts │ │ │ ├── AppTestFxIT.java │ │ │ ├── model │ │ │ ├── countries │ │ │ │ ├── CountrySelectorInterfaceTest.java │ │ │ │ ├── DataFxCountrySelectorIntegrationTest.java │ │ │ │ ├── DomCountrySelectorIntegrationTest.java │ │ │ │ └── JAXBCountrySelectorIntegrationTest.java │ │ │ └── validation │ │ │ │ ├── BirthdayValidatorTest.java │ │ │ │ ├── EmailAddressValidatorTest.java │ │ │ │ └── PhoneNumberValidatorTest.java │ │ │ └── ui │ │ │ ├── about │ │ │ └── AboutViewModelTest.java │ │ │ ├── addressform │ │ │ └── AddressFormViewModelTest.java │ │ │ ├── contactdialog │ │ │ ├── ContactDialogViewModelTest.java │ │ │ └── ContactFormViewModelTest.java │ │ │ ├── detail │ │ │ └── DetailViewModelTest.java │ │ │ ├── editcontact │ │ │ └── EditContactDialogViewModelTest.java │ │ │ └── master │ │ │ ├── MasterTableViewModelTest.java │ │ │ └── MasterViewModelTest.java │ │ └── resources │ │ └── countries │ │ ├── iso_3166.xml │ │ └── iso_3166_2.xml ├── jigsaw-example │ ├── README.md │ ├── app │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ ├── de │ │ │ │ └── saxsys │ │ │ │ │ └── mvvmfx │ │ │ │ │ └── examples │ │ │ │ │ └── jigsaw │ │ │ │ │ └── app │ │ │ │ │ ├── AppView.java │ │ │ │ │ ├── AppViewModel.java │ │ │ │ │ └── Main.java │ │ │ └── module-info.java │ │ │ └── resources │ │ │ ├── app_de_DE.properties │ │ │ ├── app_en.properties │ │ │ └── de │ │ │ └── saxsys │ │ │ └── mvvmfx │ │ │ └── examples │ │ │ └── jigsaw │ │ │ └── app │ │ │ └── AppView.fxml │ ├── circle │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ ├── de │ │ │ │ └── saxsys │ │ │ │ │ └── mvvmfx │ │ │ │ │ └── examples │ │ │ │ │ └── jigsaw │ │ │ │ │ └── circle │ │ │ │ │ ├── CircleView.java │ │ │ │ │ └── CircleViewModel.java │ │ │ └── module-info.java │ │ │ └── resources │ │ │ ├── circle_de.properties │ │ │ ├── circle_en.properties │ │ │ └── de │ │ │ └── saxsys │ │ │ └── mvvmfx │ │ │ └── examples │ │ │ └── jigsaw │ │ │ └── circle │ │ │ ├── CircleView.css │ │ │ └── CircleView.fxml │ ├── pom.xml │ └── rectangle │ │ ├── pom.xml │ │ └── src │ │ └── main │ │ ├── java │ │ ├── de │ │ │ └── saxsys │ │ │ │ └── mvvmfx │ │ │ │ └── examples │ │ │ │ └── jigsaw │ │ │ │ └── rectangle │ │ │ │ ├── RectangleView.java │ │ │ │ └── RectangleViewModel.java │ │ └── module-info.java │ │ └── resources │ │ ├── de │ │ └── saxsys │ │ │ └── mvvmfx │ │ │ └── examples │ │ │ └── jigsaw │ │ │ └── rectangle │ │ │ ├── Rectangle.css │ │ │ └── RectangleView.fxml │ │ ├── rectangle_de.properties │ │ └── rectangle_en.properties ├── mini-examples │ ├── async-todoapp-futures │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── de │ │ │ │ └── saxsys │ │ │ │ └── mvvmfx │ │ │ │ └── examples │ │ │ │ └── async_todoapp_futures │ │ │ │ ├── App.java │ │ │ │ ├── model │ │ │ │ ├── TodoItem.java │ │ │ │ ├── TodoItemService.java │ │ │ │ └── TodoItemServiceImpl.java │ │ │ │ └── ui │ │ │ │ ├── ControlsView.java │ │ │ │ ├── ControlsViewModel.java │ │ │ │ ├── ItemListView.java │ │ │ │ ├── ItemListViewModel.java │ │ │ │ ├── ListItem.java │ │ │ │ ├── MainView.java │ │ │ │ ├── MainViewModel.java │ │ │ │ └── TodoScope.java │ │ │ └── resources │ │ │ └── de │ │ │ └── saxsys │ │ │ └── mvvmfx │ │ │ └── examples │ │ │ └── async_todoapp_futures │ │ │ └── ui │ │ │ ├── ControlsView.fxml │ │ │ ├── ItemList.fxml │ │ │ └── MainView.fxml │ ├── fx-root-example │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── de │ │ │ │ │ └── saxsys │ │ │ │ │ └── mvvmfx │ │ │ │ │ └── examples │ │ │ │ │ └── fx_root_example │ │ │ │ │ ├── LabeledTextField.java │ │ │ │ │ ├── LabeledTextFieldViewModel.java │ │ │ │ │ └── Starter.java │ │ │ └── resources │ │ │ │ └── de │ │ │ │ └── saxsys │ │ │ │ └── mvvmfx │ │ │ │ └── examples │ │ │ │ └── fx_root_example │ │ │ │ └── LabeledTextField.fxml │ │ │ └── test │ │ │ └── java │ │ │ └── de │ │ │ └── saxsys │ │ │ └── mvvmfx │ │ │ └── examples │ │ │ └── fx_root_example │ │ │ ├── IntegrationTestWithTestFX.java │ │ │ └── LabeledTextFieldTest.java │ ├── helloworld-custom-fxml-path │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── de │ │ │ │ └── saxsys │ │ │ │ └── mvvmfx │ │ │ │ └── examples │ │ │ │ └── helloworld │ │ │ │ ├── HelloView.java │ │ │ │ ├── HelloViewModel.java │ │ │ │ └── Starter.java │ │ │ └── resources │ │ │ └── some │ │ │ └── other │ │ │ └── path │ │ │ └── HalloWelt.fxml │ ├── helloworld-spring-boot │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── de │ │ │ └── saxsys │ │ │ └── mvvmfx │ │ │ └── examples │ │ │ └── helloworld │ │ │ ├── App.java │ │ │ ├── service │ │ │ ├── GreetingService.java │ │ │ └── GreetingServiceImpl.java │ │ │ └── view │ │ │ ├── HelloView.fxml │ │ │ ├── HelloView.java │ │ │ └── HelloViewModel.java │ ├── helloworld-without-fxml │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── de │ │ │ └── saxsys │ │ │ └── mvvmfx │ │ │ └── examples │ │ │ └── helloworld │ │ │ ├── HelloWorldView.java │ │ │ ├── HelloWorldViewModel.java │ │ │ └── Starter.java │ ├── helloworld │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── de │ │ │ │ └── saxsys │ │ │ │ └── mvvmfx │ │ │ │ └── examples │ │ │ │ └── helloworld │ │ │ │ ├── HelloWorldView.java │ │ │ │ ├── HelloWorldViewModel.java │ │ │ │ └── Starter.java │ │ │ └── resources │ │ │ └── de │ │ │ └── saxsys │ │ │ └── mvvmfx │ │ │ └── examples │ │ │ └── helloworld │ │ │ └── HelloWorldView.fxml │ ├── pom.xml │ ├── scopes-example │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── de │ │ │ └── saxsys │ │ │ └── mvvmfx │ │ │ └── examples │ │ │ └── scopesexample │ │ │ ├── App.java │ │ │ ├── model │ │ │ ├── Document.java │ │ │ ├── DocumentRepository.java │ │ │ └── Entity.java │ │ │ └── ui │ │ │ ├── MainView.fxml │ │ │ ├── MainView.java │ │ │ ├── MainViewModel.java │ │ │ ├── documentdetails │ │ │ ├── DetailsScope.java │ │ │ ├── DocumentDetailsView.fxml │ │ │ ├── DocumentDetailsView.java │ │ │ ├── DocumentDetailsViewModel.java │ │ │ └── descriptionedit │ │ │ │ ├── DescriptionEditView.fxml │ │ │ │ ├── DescriptionEditView.java │ │ │ │ └── DescriptionEditViewModel.java │ │ │ └── overview │ │ │ ├── OverviewScope.java │ │ │ ├── OverviewView.fxml │ │ │ ├── OverviewView.java │ │ │ ├── OverviewViewModel.java │ │ │ ├── detail │ │ │ ├── OverviewDetailView.fxml │ │ │ ├── OverviewDetailView.java │ │ │ └── OverviewDetailViewModel.java │ │ │ └── master │ │ │ ├── OverviewMasterView.fxml │ │ │ ├── OverviewMasterView.java │ │ │ └── OverviewMasterViewModel.java │ ├── synchronizefx-example │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── de │ │ │ │ └── saxsys │ │ │ │ └── mvvmfx │ │ │ │ └── examples │ │ │ │ └── synchronize │ │ │ │ ├── ClientApp.java │ │ │ │ ├── ServerApp.java │ │ │ │ ├── SliderView.java │ │ │ │ └── SliderViewModel.java │ │ │ └── resources │ │ │ └── de │ │ │ └── saxsys │ │ │ └── mvvmfx │ │ │ └── examples │ │ │ └── synchronize │ │ │ └── SliderView.fxml │ └── welcome-example │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ ├── main │ │ ├── java │ │ │ └── de │ │ │ │ └── saxsys │ │ │ │ └── mvvmfx │ │ │ │ └── examples │ │ │ │ └── welcome │ │ │ │ ├── CdiStarter.java │ │ │ │ ├── GuiceStarter.java │ │ │ │ ├── model │ │ │ │ ├── Gender.java │ │ │ │ ├── Person.java │ │ │ │ └── Repository.java │ │ │ │ ├── view │ │ │ │ ├── maincontainer │ │ │ │ │ └── MainContainerView.java │ │ │ │ ├── personlogin │ │ │ │ │ └── PersonLoginView.java │ │ │ │ └── personwelcome │ │ │ │ │ └── PersonWelcomeView.java │ │ │ │ └── viewmodel │ │ │ │ ├── maincontainer │ │ │ │ └── MainContainerViewModel.java │ │ │ │ ├── personlogin │ │ │ │ ├── PersonLoginViewModel.java │ │ │ │ └── PersonLoginViewModelNotifications.java │ │ │ │ └── personwelcome │ │ │ │ └── PersonWelcomeViewModel.java │ │ └── resources │ │ │ ├── META-INF │ │ │ └── beans.xml │ │ │ └── de │ │ │ └── saxsys │ │ │ └── mvvmfx │ │ │ └── examples │ │ │ └── welcome │ │ │ └── view │ │ │ ├── maincontainer │ │ │ └── MainContainerView.fxml │ │ │ ├── personlogin │ │ │ └── PersonLoginView.fxml │ │ │ └── personwelcome │ │ │ └── PersonWelcomeView.fxml │ │ └── test │ │ └── java │ │ └── de │ │ └── saxsys │ │ └── mvvmfx │ │ └── viewmodel │ │ ├── personlogin │ │ └── PersonLoginViewModelTest.java │ │ └── personwelcome │ │ └── PersonWelcomeViewModelTest.java ├── pom.xml └── todomvc-example │ ├── README.md │ ├── pom.xml │ ├── screenshot.png │ └── src │ └── main │ └── java │ └── de │ └── saxsys │ └── mvvmfx │ └── examples │ └── todomvc │ ├── App.java │ ├── model │ ├── TodoItem.java │ └── TodoItemStore.java │ └── ui │ ├── FilterHelper.java │ ├── MainView.fxml │ ├── MainView.java │ ├── MainViewModel.java │ ├── additems │ ├── AddItemsView.fxml │ ├── AddItemsView.java │ ├── AddItemsViewModel.java │ └── additems.css │ ├── controls │ ├── ControlsView.fxml │ ├── ControlsView.java │ └── ControlsViewModel.java │ ├── item │ ├── ItemOverviewView.fxml │ ├── ItemOverviewView.java │ ├── ItemOverviewViewModel.java │ ├── ItemView.fxml │ ├── ItemView.java │ ├── ItemViewModel.java │ └── itemview.css │ └── main.css ├── mvvmfx-archetype ├── README.md ├── pom.xml └── src │ └── main │ └── resources │ ├── META-INF │ └── maven │ │ └── archetype-metadata.xml │ └── archetype-resources │ ├── pom.xml │ └── src │ └── main │ ├── java │ ├── HelloWorldView.java │ ├── HelloWorldViewModel.java │ └── Starter.java │ └── resources │ └── HelloWorldView.fxml ├── mvvmfx-cdi ├── README.md ├── pom.xml └── src │ ├── main │ ├── java │ │ └── de │ │ │ └── saxsys │ │ │ └── mvvmfx │ │ │ └── cdi │ │ │ ├── MvvmfxCdiApplication.java │ │ │ └── internal │ │ │ └── MvvmfxProducer.java │ └── resources │ │ └── META-INF │ │ └── beans.xml │ └── test │ ├── java │ └── de │ │ └── saxsys │ │ └── mvvmfx │ │ └── cdi │ │ └── it │ │ ├── IntegrationTest.java │ │ ├── MyApp.java │ │ ├── MyService.java │ │ ├── MyView.java │ │ └── MyViewModel.java │ └── resources │ ├── META-INF │ └── beans.xml │ └── de │ └── saxsys │ └── mvvmfx │ └── cdi │ └── it │ └── MyView.fxml ├── mvvmfx-easydi ├── README.md ├── pom.xml └── src │ └── main │ └── java │ └── de │ └── saxsys │ └── mvvmfx │ └── easydi │ └── MvvmfxEasyDIApplication.java ├── mvvmfx-guice ├── README.md ├── pom.xml └── src │ ├── main │ └── java │ │ └── de │ │ └── saxsys │ │ └── mvvmfx │ │ └── guice │ │ ├── MvvmfxGuiceApplication.java │ │ └── internal │ │ ├── GuiceInjector.java │ │ └── MvvmfxModule.java │ └── test │ ├── java │ └── de │ │ └── saxsys │ │ └── mvvmfx │ │ └── guice │ │ ├── DuplicateInjectionBugTest.java │ │ ├── interceptiontest │ │ ├── InterceptedView.java │ │ ├── InterceptedViewModel.java │ │ ├── InterceptorModule.java │ │ ├── InterceptorTest.java │ │ ├── InterceptorTestApp.java │ │ └── TestInterceptor.java │ │ └── it │ │ ├── IntegrationTest.java │ │ ├── MyApp.java │ │ ├── MyModule.java │ │ ├── MyService.java │ │ ├── MyServiceImpl.java │ │ ├── MyView.java │ │ └── MyViewModel.java │ └── resources │ └── de │ └── saxsys │ └── mvvmfx │ └── guice │ ├── interceptiontest │ └── InterceptedView.fxml │ └── it │ └── MyView.fxml ├── mvvmfx-spring-boot ├── README.md ├── pom.xml └── src │ ├── main │ └── java │ │ └── de │ │ └── saxsys │ │ └── mvvmfx │ │ └── spring │ │ └── MvvmfxSpringApplication.java │ └── test │ ├── java │ └── de │ │ └── saxsys │ │ └── mvvmfx │ │ └── spring │ │ ├── IntegrationTest.java │ │ ├── MyApp.java │ │ ├── MyService.java │ │ ├── MyView.java │ │ └── MyViewModel.java │ └── resources │ └── de │ └── saxsys │ └── mvvmfx │ └── spring │ └── MyView.fxml ├── mvvmfx-testing-utils ├── README.md ├── pom.xml └── src │ ├── main │ └── java │ │ └── de │ │ └── saxsys │ │ └── mvvmfx │ │ └── testingutils │ │ ├── ExceptionUtils.java │ │ ├── FxTestingUtils.java │ │ ├── GCVerifier.java │ │ ├── JfxToolkitExtension.java │ │ └── jfxrunner │ │ ├── JfxRunner.java │ │ └── TestInJfxThread.java │ └── test │ └── java │ └── de │ └── saxsys │ └── mvvmfx │ └── testingutils │ ├── GCVerifierTest.java │ ├── Junit5Test.java │ └── jfxrunner │ ├── AnotherJfxRunnerTest.java │ ├── JfxRunnerTest.java │ └── TestFxTest.java ├── mvvmfx-utils ├── README.md ├── pom.xml └── src │ ├── main │ └── java │ │ └── de │ │ └── saxsys │ │ └── mvvmfx │ │ └── utils │ │ ├── listener │ │ ├── ICleanable.java │ │ ├── ListenerManager.java │ │ └── package-info.java │ │ └── sizebinding │ │ ├── SizeBindingsBuilder.java │ │ ├── internal │ │ ├── BindHeightBuilderStepImpl.java │ │ ├── BindSizeBuilderStepImpl.java │ │ ├── BindWidthBuilderStepImpl.java │ │ ├── UnbindHeightBuilderStepImpl.java │ │ ├── UnbindSizeBuilderStepImpl.java │ │ ├── UnbindWidthBuilderStepImpl.java │ │ └── package-info.java │ │ └── package-info.java │ └── test │ └── java │ └── de │ └── saxsys │ └── mvvmfx │ └── utils │ ├── listener │ └── ListenerManagerTest.java │ └── sizebinding │ ├── BindSizeToControlTest.java │ ├── BindSizeToImageViewTest.java │ ├── BindSizeToRectangleTest.java │ ├── BindSizeToRegionTest.java │ ├── SizeBindingsBuilderTestBase.java │ ├── UnbindHeightTest.java │ ├── UnbindSizeTest.java │ └── UnbindWidthTest.java ├── mvvmfx-validation ├── README.md ├── pom.xml └── src │ ├── main │ └── java │ │ └── de │ │ └── saxsys │ │ └── mvvmfx │ │ └── utils │ │ └── validation │ │ ├── CompositeValidationStatus.java │ │ ├── CompositeValidator.java │ │ ├── FunctionBasedValidator.java │ │ ├── ObservableRuleBasedValidator.java │ │ ├── ObservableRules.java │ │ ├── Severity.java │ │ ├── ValidationMessage.java │ │ ├── ValidationStatus.java │ │ ├── Validator.java │ │ └── visualization │ │ ├── ControlsFxVisualizer.java │ │ ├── ValidationVisualizer.java │ │ └── ValidationVisualizerBase.java │ └── test │ ├── java │ └── de │ │ └── saxsys │ │ └── mvvmfx │ │ └── utils │ │ └── validation │ │ ├── CompositeValidatorTest.java │ │ ├── CustomValidationMessageTest.java │ │ ├── FunctionBasedValidatorTest.java │ │ ├── HighestMessageBugTest.java │ │ ├── ObservableRulesTest.java │ │ ├── ObservableRulesValidatorTest.java │ │ ├── TestApp.java │ │ ├── ValidationMessageTest.java │ │ ├── ValidationStatusTest.java │ │ ├── crossfieldexample │ │ ├── CrossFieldExampleApp.java │ │ ├── RegisterFormView.java │ │ └── RegisterFormViewModel.java │ │ └── cssvisualizer │ │ ├── CssVisualizer.java │ │ ├── CssVisualizerExampleApp.java │ │ ├── CssVisualizerView.java │ │ ├── CssVisualizerViewModel.java │ │ └── package-info.java │ └── resources │ └── de │ └── saxsys │ └── mvvmfx │ └── utils │ └── validation │ └── cssvisualizer │ ├── CssVisualizerView.fxml │ └── style.css ├── mvvmfx ├── README.md ├── pom.xml └── src │ ├── main │ └── java │ │ └── de │ │ └── saxsys │ │ └── mvvmfx │ │ ├── Context.java │ │ ├── FluentViewLoader.java │ │ ├── FxmlPath.java │ │ ├── FxmlView.java │ │ ├── Initialize.java │ │ ├── InjectContext.java │ │ ├── InjectResourceBundle.java │ │ ├── InjectScope.java │ │ ├── InjectViewModel.java │ │ ├── JavaView.java │ │ ├── MvvmFX.java │ │ ├── SceneLifecycle.java │ │ ├── Scope.java │ │ ├── ScopeProvider.java │ │ ├── ViewModel.java │ │ ├── ViewTuple.java │ │ ├── internal │ │ ├── ContextImpl.java │ │ ├── MvvmfxApplication.java │ │ ├── SideEffect.java │ │ ├── SideEffectWithException.java │ │ ├── WeakValueHashMap.java │ │ ├── package-info.java │ │ └── viewloader │ │ │ ├── DependencyInjector.java │ │ │ ├── FxmlViewLoader.java │ │ │ ├── GlobalBuilderFactory.java │ │ │ ├── JavaViewLoader.java │ │ │ ├── PreventGarbageCollectionStore.java │ │ │ ├── ReflectionUtils.java │ │ │ ├── ResourceBundleInjector.java │ │ │ ├── ResourceBundleManager.java │ │ │ ├── View.java │ │ │ ├── ViewLoaderReflectionUtils.java │ │ │ ├── ViewLoaderScopeUtils.java │ │ │ └── package-info.java │ │ ├── package-info.java │ │ └── utils │ │ ├── commands │ │ ├── Action.java │ │ ├── Command.java │ │ ├── CommandBase.java │ │ ├── CompositeCommand.java │ │ └── DelegateCommand.java │ │ ├── itemlist │ │ ├── ItemList.java │ │ ├── ListTransformation.java │ │ ├── ModelToStringFunction.java │ │ ├── SelectableItemList.java │ │ ├── SelectableStringList.java │ │ └── package-info.java │ │ ├── mapping │ │ ├── BeanListPropertyField.java │ │ ├── BeanMapPropertyField.java │ │ ├── BeanPropertyField.java │ │ ├── BeanSetPropertyField.java │ │ ├── FxListPropertyField.java │ │ ├── FxMapPropertyField.java │ │ ├── FxPropertyField.java │ │ ├── FxSetPropertyField.java │ │ ├── ImmutableBeanPropertyField.java │ │ ├── ImmutableListPropertyField.java │ │ ├── ImmutableMapPropertyField.java │ │ ├── ImmutablePropertyField.java │ │ ├── ImmutableSetPropertyField.java │ │ ├── ModelWrapper.java │ │ ├── PropertyField.java │ │ └── accessorfunctions │ │ │ ├── BooleanGetter.java │ │ │ ├── BooleanImmutableSetter.java │ │ │ ├── BooleanPropertyAccessor.java │ │ │ ├── BooleanSetter.java │ │ │ ├── DoubleGetter.java │ │ │ ├── DoubleImmutableSetter.java │ │ │ ├── DoublePropertyAccessor.java │ │ │ ├── DoubleSetter.java │ │ │ ├── FloatGetter.java │ │ │ ├── FloatImmutableSetter.java │ │ │ ├── FloatPropertyAccessor.java │ │ │ ├── FloatSetter.java │ │ │ ├── IntGetter.java │ │ │ ├── IntImmutableSetter.java │ │ │ ├── IntPropertyAccessor.java │ │ │ ├── IntSetter.java │ │ │ ├── ListGetter.java │ │ │ ├── ListImmutableSetter.java │ │ │ ├── ListPropertyAccessor.java │ │ │ ├── ListSetter.java │ │ │ ├── LongGetter.java │ │ │ ├── LongImmutableSetter.java │ │ │ ├── LongPropertyAccessor.java │ │ │ ├── LongSetter.java │ │ │ ├── MapGetter.java │ │ │ ├── MapImmutableSetter.java │ │ │ ├── MapPropertyAccessor.java │ │ │ ├── MapSetter.java │ │ │ ├── ObjectGetter.java │ │ │ ├── ObjectImmutableSetter.java │ │ │ ├── ObjectPropertyAccessor.java │ │ │ ├── ObjectSetter.java │ │ │ ├── SetGetter.java │ │ │ ├── SetImmutableSetter.java │ │ │ ├── SetPropertyAccessor.java │ │ │ ├── SetSetter.java │ │ │ ├── StringGetter.java │ │ │ ├── StringImmutableSetter.java │ │ │ ├── StringPropertyAccessor.java │ │ │ ├── StringSetter.java │ │ │ └── package-info.java │ │ ├── notifications │ │ ├── DefaultNotificationCenter.java │ │ ├── NotificationCenter.java │ │ ├── NotificationCenterFactory.java │ │ ├── NotificationObserver.java │ │ ├── NotificationTestHelper.java │ │ ├── ThreadlessNotificationTestHelper.java │ │ ├── WeakNotificationObserver.java │ │ └── package-info.java │ │ ├── package-info.java │ │ └── viewlist │ │ ├── CachedViewModelCellFactory.java │ │ ├── ViewListCell.java │ │ ├── ViewListCellFactory.java │ │ ├── ViewTupleMapper.java │ │ └── package-info.java │ └── test │ ├── java │ ├── FxmlViewInDefaultPackage.java │ ├── FxmlViewinDefaultPackageTest.java │ └── de │ │ └── saxsys │ │ └── mvvmfx │ │ ├── internal │ │ └── viewloader │ │ │ ├── DependencyInjectorTest.java │ │ │ ├── FluentViewLoader_API_Test.java │ │ │ ├── FluentViewLoader_FxmlView_Test.java │ │ │ ├── FluentViewLoader_JavaView_Test.java │ │ │ ├── FluentViewLoader_ResourceBundle_Test.java │ │ │ ├── MockableViewLoaderTest.java │ │ │ ├── ResourceBundleAssert.java │ │ │ ├── ResourceBundleInjectorTest.java │ │ │ ├── ResourceBundleManagerTest.java │ │ │ ├── ViewLoaderReflectionUtilsTest.java │ │ │ ├── builderfactory │ │ │ ├── BuilderFactoryTest.java │ │ │ ├── BuilderFactoryTestView.java │ │ │ ├── BuilderFactoryTestViewModel.java │ │ │ └── CustomTextField.java │ │ │ ├── example │ │ │ ├── InvalidFxmlTestView.java │ │ │ ├── TestFxmlPathView.java │ │ │ ├── TestFxmlView.java │ │ │ ├── TestFxmlViewFxRoot.java │ │ │ ├── TestFxmlViewModelAsController.java │ │ │ ├── TestFxmlViewModelAsControllerChild.java │ │ │ ├── TestFxmlViewModelAsControllerChildViewModel.java │ │ │ ├── TestFxmlViewModelAsControllerParent.java │ │ │ ├── TestFxmlViewModelAsControllerParentViewModel.java │ │ │ ├── TestFxmlViewModelAsControllerViewModel.java │ │ │ ├── TestFxmlViewModelAsControllerWithCustomPathView.java │ │ │ ├── TestFxmlViewModelAsControllerWithCustomPathViewModel.java │ │ │ ├── TestFxmlViewMultipleViewModels.java │ │ │ ├── TestFxmlViewOnlyViewModelResourceBundle.java │ │ │ ├── TestFxmlViewOnlyViewResourceBundle.java │ │ │ ├── TestFxmlViewResourceBundle.java │ │ │ ├── TestFxmlViewResourceBundleWithoutController.java │ │ │ ├── TestFxmlViewWithActionMethod.java │ │ │ ├── TestFxmlViewWithMissingController.java │ │ │ ├── TestFxmlViewWithViewModelWithAnnotatedInitialize.java │ │ │ ├── TestFxmlViewWithViewModelWithMultipleInitializeAnnotations.java │ │ │ ├── TestFxmlViewWithViewModelWithMultipleInitializeMethods.java │ │ │ ├── TestFxmlViewWithViewModelWithNonValidInitializeMethodViewWithArguments.java │ │ │ ├── TestFxmlViewWithViewModelWithNonValidInitializeMethodViewWithBadReturnType.java │ │ │ ├── TestFxmlViewWithWrongAnnotationUsage.java │ │ │ ├── TestFxmlViewWithWrongController.java │ │ │ ├── TestFxmlViewWithWrongInjectedViewModel.java │ │ │ ├── TestFxmlViewWithoutViewModelField.java │ │ │ ├── TestFxmlViewWithoutViewModelType.java │ │ │ ├── TestFxmlViewWithoutViewModelTypeButWithInjection.java │ │ │ ├── TestFxmlViewWithoutViewModelTypeButWithInjection2.java │ │ │ ├── TestJavaView.java │ │ │ ├── TestScope1.java │ │ │ ├── TestScope2.java │ │ │ ├── TestViewA.java │ │ │ ├── TestViewB.java │ │ │ ├── TestViewModel.java │ │ │ ├── TestViewModelA.java │ │ │ ├── TestViewModelB.java │ │ │ ├── TestViewModelWithAnnotatedInitialize.java │ │ │ ├── TestViewModelWithDoubleInjection.java │ │ │ ├── TestViewModelWithMultipleInitializeAnnotations.java │ │ │ ├── TestViewModelWithMultipleInitializeMethodsViewModel.java │ │ │ ├── TestViewModelWithNonValidInitializeMethodWithArguments.java │ │ │ ├── TestViewModelWithNonValidInitializeMethodWithBadReturnType.java │ │ │ └── TestViewModelWithResourceBundle.java │ │ │ └── lifecycle │ │ │ ├── LifecycleTest.java │ │ │ ├── example_basic │ │ │ ├── LifecycleTestRootView.java │ │ │ ├── LifecycleTestRootViewModel.java │ │ │ ├── LifecycleTestSub1View.java │ │ │ ├── LifecycleTestSub1ViewModel.java │ │ │ ├── LifecycleTestSub2View.java │ │ │ └── LifecycleTestSub2ViewModel.java │ │ │ ├── example_gc │ │ │ ├── LifecycleGCTestRootView.java │ │ │ ├── LifecycleGCTestRootViewModel.java │ │ │ ├── LifecycleGCTestSub1View.java │ │ │ ├── LifecycleGCTestSub1ViewModel.java │ │ │ ├── LifecycleGCTestSub2View.java │ │ │ ├── LifecycleGCTestSub2ViewModel.java │ │ │ └── package-info.java │ │ │ ├── example_notification │ │ │ ├── LifecycleNotificationView.java │ │ │ ├── LifecycleNotificationViewModel.java │ │ │ └── package-info.java │ │ │ └── example_notification_without_lifecycle │ │ │ ├── NotificationWithoutLifecycleView.java │ │ │ ├── NotificationWithoutLifecycleViewModel.java │ │ │ └── package-info.java │ │ ├── resourcebundle │ │ ├── global │ │ │ ├── GlobalResourceBundleTest.java │ │ │ ├── TestView.java │ │ │ └── TestViewModel.java │ │ └── included │ │ │ ├── IncludedView.java │ │ │ ├── IncludedViewModel.java │ │ │ ├── IncludedViewsTest.java │ │ │ ├── RootView.java │ │ │ └── RootViewModel.java │ │ ├── scopes │ │ ├── context │ │ │ ├── ContextTest.java │ │ │ ├── TestScope.java │ │ │ └── views │ │ │ │ ├── ScopedFxmlView.java │ │ │ │ └── ScopedFxmlViewModel.java │ │ ├── example1 │ │ │ ├── Example1Scope1.java │ │ │ ├── Example1Scope2.java │ │ │ ├── Example1Scope3.java │ │ │ ├── Example1ScopesTest.java │ │ │ └── views │ │ │ │ ├── ScopedFxmlViewA.java │ │ │ │ ├── ScopedFxmlViewB.java │ │ │ │ ├── ScopedFxmlViewC.java │ │ │ │ ├── ScopedFxmlViewD.java │ │ │ │ ├── ScopedFxmlViewE.java │ │ │ │ ├── ScopedFxmlViewF.java │ │ │ │ ├── ScopedFxmlViewG.java │ │ │ │ ├── ScopedJavaViewA.java │ │ │ │ ├── ScopedJavaViewB.java │ │ │ │ ├── ScopedViewModelA.java │ │ │ │ ├── ScopedViewModelB.java │ │ │ │ ├── ScopedViewModelC.java │ │ │ │ ├── ScopedViewModelD.java │ │ │ │ ├── ScopedViewModelE.java │ │ │ │ ├── ScopedViewModelF.java │ │ │ │ ├── ScopedViewModelG.java │ │ │ │ └── ScopesFxmlParentView.java │ │ ├── example2 │ │ │ ├── Example2Scope1.java │ │ │ ├── Example2ScopesTest.java │ │ │ └── views │ │ │ │ ├── ScopedViewA.java │ │ │ │ ├── ScopedViewB.java │ │ │ │ ├── ScopedViewC.java │ │ │ │ ├── ScopedViewModelA.java │ │ │ │ ├── ScopedViewModelB.java │ │ │ │ └── ScopedViewModelC.java │ │ ├── example3 │ │ │ ├── Example3Scope.java │ │ │ ├── Example3Test.java │ │ │ └── views │ │ │ │ ├── MainView.java │ │ │ │ ├── MainViewModel.java │ │ │ │ ├── content │ │ │ │ ├── ContentView.java │ │ │ │ └── ContentViewModel.java │ │ │ │ └── menu │ │ │ │ ├── MenuView.java │ │ │ │ └── MenuViewModel.java │ │ ├── example4 │ │ │ └── views │ │ │ │ ├── ChildView.java │ │ │ │ ├── ChildViewModel.java │ │ │ │ ├── DialogScope.java │ │ │ │ ├── DialogView.java │ │ │ │ ├── DialogViewModel.java │ │ │ │ ├── Example4Test.java │ │ │ │ ├── ParentView.java │ │ │ │ └── ParentViewModel.java │ │ ├── example5 │ │ │ ├── Example5Scope.java │ │ │ ├── Example5Test.java │ │ │ ├── MyView.java │ │ │ └── MyViewModel.java │ │ ├── example6 │ │ │ ├── Example5App.java │ │ │ ├── ParentView.java │ │ │ ├── ParentViewModel.java │ │ │ ├── TabScope.java │ │ │ ├── TabView.java │ │ │ └── TabViewModel.java │ │ ├── injectionorder │ │ │ ├── InjectionOrderTest.java │ │ │ ├── TestScope.java │ │ │ ├── TestView.java │ │ │ └── TestViewModel.java │ │ └── scope_in_view │ │ │ ├── RootView.java │ │ │ ├── RootViewModel.java │ │ │ ├── ScopeInViewTest.java │ │ │ ├── ScopeInViewTestView.java │ │ │ ├── ScopeInViewTestViewModel.java │ │ │ └── TestScope.java │ │ └── utils │ │ ├── commands │ │ ├── CommandsWithoutUiThreadTest.java │ │ ├── CompositeCommandTest.java │ │ ├── DelegateCommandTest.java │ │ └── testapp │ │ │ ├── App.java │ │ │ ├── MainView.java │ │ │ ├── MainViewModel.java │ │ │ ├── Service.java │ │ │ ├── SubView.java │ │ │ └── SubViewModel.java │ │ ├── itemlist │ │ ├── ItemListTest.java │ │ ├── ListTransformationTest.java │ │ ├── Person.java │ │ └── SelectableItemListTest.java │ │ ├── mapping │ │ ├── ExampleModel.java │ │ ├── FieldMethodOverloadingTest.java │ │ ├── ModelWrapperTest.java │ │ ├── Person.java │ │ ├── PersonFX.java │ │ └── PersonImmutable.java │ │ └── notifications │ │ ├── ClearNotificationCenterTest.java │ │ ├── ConcurrentModificationBugTest.java │ │ ├── DefaultNotificationCenterTest.java │ │ ├── MemoryLeakGlobalTest.java │ │ ├── NotificationTestHelperTest.java │ │ ├── ResetNotificationCenterTest.java │ │ ├── ThreadlessNotificationTestHelperTest.java │ │ └── viewmodel │ │ ├── MemoryLeakOnViewModelTest.java │ │ ├── MemoryLeakView.java │ │ ├── MemoryLeakViewModel.java │ │ ├── ViewModelTest.java │ │ ├── ViewModelWithoutUiThreadTest.java │ │ └── WeakNotificationsTest.java │ └── resources │ ├── FxmlViewInDefaultPackage.fxml │ └── de │ └── saxsys │ └── mvvmfx │ ├── internal │ └── viewloader │ │ ├── builderfactory │ │ └── BuilderFactoryTestView.fxml │ │ ├── example │ │ ├── TestFxmlImplicitInitView.fxml │ │ ├── TestFxmlView.fxml │ │ ├── TestFxmlViewFxRoot.fxml │ │ ├── TestFxmlViewModelAsController.fxml │ │ ├── TestFxmlViewModelAsControllerChild.fxml │ │ ├── TestFxmlViewModelAsControllerParent.fxml │ │ ├── TestFxmlViewModelAsControllerWithCustomPath.fxml │ │ ├── TestFxmlViewMultipleViewModels.fxml │ │ ├── TestFxmlViewOnlyViewModelResourceBundle.fxml │ │ ├── TestFxmlViewOnlyViewResourceBundle.fxml │ │ ├── TestFxmlViewResourceBundle.fxml │ │ ├── TestFxmlViewResourceBundleWithoutController.fxml │ │ ├── TestFxmlViewWithActionMethod.fxml │ │ ├── TestFxmlViewWithCustomPath.fxml │ │ ├── TestFxmlViewWithMissingController.fxml │ │ ├── TestFxmlViewWithViewModelWithAnnotatedInitialize.fxml │ │ ├── TestFxmlViewWithViewModelWithMultipleInitializeAnnotations.fxml │ │ ├── TestFxmlViewWithViewModelWithMultipleInitializeMethods.fxml │ │ ├── TestFxmlViewWithViewModelWithNonValidInitializeMethodViewWithArguments.fxml │ │ ├── TestFxmlViewWithViewModelWithNonValidInitializeMethodViewWithBadReturnType.fxml │ │ ├── TestFxmlViewWithWrongAnnotationUsage.fxml │ │ ├── TestFxmlViewWithWrongController.fxml │ │ ├── TestFxmlViewWithWrongInjectedViewModel.fxml │ │ ├── TestFxmlViewWithoutController.fxml │ │ ├── TestFxmlViewWithoutViewModelField.fxml │ │ ├── TestFxmlViewWithoutViewModelType.fxml │ │ ├── TestFxmlViewWithoutViewModelTypeButWithInjection.fxml │ │ ├── TestFxmlViewWithoutViewModelTypeButWithInjection2.fxml │ │ ├── TestViewA.fxml │ │ ├── TestViewB.fxml │ │ ├── testResourceBundle.properties │ │ └── wrong.fxml │ │ └── lifecycle │ │ ├── example_basic │ │ ├── LifecycleTestRootView.fxml │ │ ├── LifecycleTestSub1View.fxml │ │ └── LifecycleTestSub2View.fxml │ │ ├── example_gc │ │ ├── LifecycleGCTestRootView.fxml │ │ ├── LifecycleGCTestSub1View.fxml │ │ └── LifecycleGCTestSub2View.fxml │ │ ├── example_notification │ │ └── LifecycleNotificationView.fxml │ │ └── example_notification_without_lifecycle │ │ └── NotificationWithoutLifecycleView.fxml │ ├── resourcebundle │ ├── global │ │ ├── TestView.fxml │ │ ├── global.properties │ │ ├── other.properties │ │ └── third.properties │ └── included │ │ ├── IncludedView.fxml │ │ ├── RootView.fxml │ │ ├── included.properties │ │ └── root.properties │ ├── scopes │ ├── context │ │ └── views │ │ │ └── ScopedFxmlView.fxml │ ├── example1 │ │ └── views │ │ │ ├── ScopedFxmlViewA.fxml │ │ │ ├── ScopedFxmlViewB.fxml │ │ │ ├── ScopedFxmlViewC.fxml │ │ │ ├── ScopedFxmlViewD.fxml │ │ │ ├── ScopedFxmlViewE.fxml │ │ │ ├── ScopedFxmlViewF.fxml │ │ │ ├── ScopedFxmlViewG.fxml │ │ │ └── ScopesFxmlParentView.fxml │ ├── example2 │ │ └── views │ │ │ ├── ScopedViewA.fxml │ │ │ ├── ScopedViewB.fxml │ │ │ └── ScopedViewC.fxml │ ├── example3 │ │ └── views │ │ │ ├── MainView.fxml │ │ │ ├── content │ │ │ └── ContentView.fxml │ │ │ └── menu │ │ │ └── MenuView.fxml │ ├── example4 │ │ └── views │ │ │ ├── ChildView.fxml │ │ │ ├── DialogView.fxml │ │ │ └── ParentView.fxml │ ├── example5 │ │ └── MyView.fxml │ ├── example6 │ │ ├── ParentView.fxml │ │ └── TabView.fxml │ ├── injectionorder │ │ └── TestView.fxml │ └── scope_in_view │ │ ├── RootView.fxml │ │ └── ScopeInViewTestView.fxml │ └── utils │ └── validation │ └── crossfieldexample │ └── RegisterFormView.fxml ├── mvvmfx_formatter.xml ├── pom.xml └── travis_snapshot_release.sh /.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | target 3 | *.bak 4 | 5 | # eclipse # 6 | *.prefs 7 | .classpath 8 | .project 9 | .metadata 10 | 11 | # Package Files # 12 | *.jar 13 | *.war 14 | *.ear 15 | *.sha1 16 | *.sha1 17 | *.repositories 18 | 19 | 20 | # intelliJ # 21 | .idea 22 | *.iml 23 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: java 2 | dist: trusty 3 | 4 | sudo: false 5 | 6 | jdk: 7 | - oraclejdk8 8 | 9 | install: true 10 | 11 | addons: 12 | apt: 13 | packages: 14 | - oracle-java8-installer 15 | 16 | before_install: 17 | - export DISPLAY=:99.0 18 | - sh -e /etc/init.d/xvfb start 19 | - java -version 20 | 21 | env: 22 | global: 23 | - secure: f4P8Bw0z427Domw/AhnOKRFOYTXkUnPr1QO/M033FferhDivssUgcX8Rmutxy3AwKV1uYoSyJDW8Hzaj6bbJ7wbh9Yetbfo6IP8vw0gfJEvndSjpmu/x9R/0Os3jbSy4Irq5+gZZzN+ba7fySMNkBD2NoAHb/xp8RskJXPOgqas= 24 | - secure: Bm0zIwBo4saIBlfr9YDvNqd8UN50FeT2hZyum3RFDmJqaXiUqwxw7sCz/lRjUwTfQrvGJXQ1I8le7zE4OVQdvpn4/LwwTJIjLY2jZNjzs4mZhkHzsM5IcGcL3lukR6soVYrGloQwmw63Okw2kZxces+1fveisPIKDlVaU1RTtMQ= 25 | 26 | after_success: 27 | - chmod ugo+x travis_snapshot_release.sh 28 | - ./travis_snapshot_release.sh 29 | -------------------------------------------------------------------------------- /examples/books-example/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sialcasa/mvvmFX/f195849ca98020ad74056991f147a05db9ce555a/examples/books-example/screenshot.png -------------------------------------------------------------------------------- /examples/books-example/src/main/java/de/saxsys/mvvmfx/examples/books/BookListItemView.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 11 | 12 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /examples/books-example/src/main/java/de/saxsys/mvvmfx/examples/books/BookListItemView.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.books; 2 | 3 | import de.saxsys.mvvmfx.FxmlView; 4 | import de.saxsys.mvvmfx.InjectViewModel; 5 | import javafx.fxml.FXML; 6 | import javafx.scene.control.Label; 7 | 8 | public class BookListItemView implements FxmlView { 9 | @FXML 10 | public Label titleLabel; 11 | @FXML 12 | public Label authorLabel; 13 | 14 | @InjectViewModel 15 | private BookListItemViewModel viewModel; 16 | 17 | public void initialize() { 18 | titleLabel.textProperty().bind(viewModel.titleProperty()); 19 | authorLabel.textProperty().bind(viewModel.authorProperty()); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /examples/books-example/src/main/java/de/saxsys/mvvmfx/examples/books/backend/Book.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.books.backend; 2 | 3 | 4 | public class Book { 5 | 6 | private final String href; 7 | private final String title; 8 | private String author; 9 | private String desc; 10 | 11 | public Book(String href, String title, String author, String desc) { 12 | this.href = href; 13 | this.title = title; 14 | this.author = author; 15 | this.desc = desc; 16 | } 17 | 18 | public String getHref() { 19 | return href; 20 | } 21 | 22 | public String getTitle() { 23 | return title; 24 | } 25 | 26 | public String getAuthor() { 27 | return author; 28 | } 29 | 30 | public void setAuthor(String author) { 31 | this.author = author; 32 | } 33 | 34 | public String getDesc() { 35 | return desc; 36 | } 37 | 38 | public void setDesc(String desc) { 39 | this.desc = desc; 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /examples/books-example/src/main/java/de/saxsys/mvvmfx/examples/books/backend/Error.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.books.backend; 2 | 3 | public class Error { 4 | 5 | private final String message; 6 | 7 | private final String details; 8 | 9 | public static Error error(String message, String details) { 10 | return new Error(message, details); 11 | } 12 | 13 | private Error(String message, String details) { 14 | this.message = message; 15 | this.details = details; 16 | } 17 | 18 | public String getMessage() { 19 | return message; 20 | } 21 | 22 | public String getDetails() { 23 | return details; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /examples/books-example/src/main/java/de/saxsys/mvvmfx/examples/books/backend/HalUtil.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.books.backend; 2 | 3 | public class HalUtil { 4 | 5 | public static String replaceParam(String href, String param) { 6 | return href.replaceFirst("\\{.+\\}", param); 7 | } 8 | 9 | public static Integer toInt(Object value) { 10 | if (value.getClass().isAssignableFrom(String.class)) { 11 | String valueStr = (String) value; 12 | return Integer.valueOf(valueStr); 13 | } 14 | return null; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /examples/books-example/src/main/java/de/saxsys/mvvmfx/examples/books/backend/LibraryService.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.books.backend; 2 | 3 | import java.util.List; 4 | import java.util.function.Consumer; 5 | 6 | public interface LibraryService { 7 | List search(String query, Consumer errorCallback); 8 | 9 | Book showDetails(Book book, Consumer errorCallback); 10 | } 11 | -------------------------------------------------------------------------------- /examples/books-example/src/main/java/de/saxsys/mvvmfx/examples/books/style.css: -------------------------------------------------------------------------------- 1 | .container { 2 | 3 | } 4 | 5 | .label 6 | { 7 | -fx-text-fill: black; 8 | } 9 | 10 | .title1{ 11 | -fx-font-size:50; 12 | } 13 | 14 | .title2{ 15 | -fx-font-size:40; 16 | -fx-text-fill: gray; 17 | } 18 | 19 | .errorLabel{ 20 | -fx-font-size:20; 21 | -fx-text-fill: red; 22 | } 23 | 24 | .split-pane *.split-pane-divider { 25 | -fx-padding: 0 1 0 1; 26 | } 27 | -------------------------------------------------------------------------------- /examples/books-example/src/main/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | %d{"HH:mm:ss,SSS"} %-5level [%-35logger{35}] %msg%n 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /examples/contacts-example/about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sialcasa/mvvmFX/f195849ca98020ad74056991f147a05db9ce555a/examples/contacts-example/about.png -------------------------------------------------------------------------------- /examples/contacts-example/address_form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sialcasa/mvvmFX/f195849ca98020ad74056991f147a05db9ce555a/examples/contacts-example/address_form.png -------------------------------------------------------------------------------- /examples/contacts-example/app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sialcasa/mvvmFX/f195849ca98020ad74056991f147a05db9ce555a/examples/contacts-example/app.png -------------------------------------------------------------------------------- /examples/contacts-example/contact_form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sialcasa/mvvmFX/f195849ca98020ad74056991f147a05db9ce555a/examples/contacts-example/contact_form.png -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/config/ResourceProvider.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.contacts.config; 2 | 3 | import javax.enterprise.inject.Produces; 4 | import javax.inject.Singleton; 5 | import java.util.ResourceBundle; 6 | 7 | /** 8 | * A singleton CDI provider that is used to load the resource bundle and provide 9 | * it for the CDI injection. 10 | */ 11 | @Singleton 12 | public class ResourceProvider { 13 | 14 | /* 15 | * Due to the @Produces annotation this resource bundle can be injected in all views. 16 | */ 17 | @Produces 18 | private ResourceBundle defaultResourceBundle = ResourceBundle.getBundle("default"); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/events/ContactsUpdatedEvent.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.contacts.events; 2 | 3 | /** 4 | * CDI event class that is used to indicate that a contact was 5 | * updated/added/removed. 6 | */ 7 | public class ContactsUpdatedEvent { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/events/TriggerShutdownEvent.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.contacts.events; 2 | 3 | /** 4 | * Event class to trigger the shutdown of the application. 5 | */ 6 | public class TriggerShutdownEvent { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/events/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * This package contains CDI event classes. 3 | */ 4 | package de.saxsys.mvvmfx.examples.contacts.events; 5 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/model/Countries.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.contacts.model; 2 | 3 | import javax.xml.bind.annotation.XmlAccessType; 4 | import javax.xml.bind.annotation.XmlAccessorType; 5 | import javax.xml.bind.annotation.XmlElement; 6 | import javax.xml.bind.annotation.XmlRootElement; 7 | import java.util.ArrayList; 8 | 9 | @XmlRootElement(name = "iso_3166_entries") 10 | @XmlAccessorType(XmlAccessType.FIELD) 11 | public class Countries { 12 | 13 | @XmlElement(name = "iso_3166_entry") 14 | private ArrayList countries; 15 | 16 | public ArrayList getCountries() { 17 | return countries; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/model/Repository.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.contacts.model; 2 | 3 | import java.util.Optional; 4 | import java.util.Set; 5 | 6 | public interface Repository { 7 | 8 | Set findAll(); 9 | 10 | Optional findById(String id); 11 | 12 | void save(Contact contact); 13 | 14 | void delete(Contact contact); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/model/countries/ISO3166_2_Entries.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.contacts.model.countries; 2 | 3 | import javax.xml.bind.annotation.XmlAccessType; 4 | import javax.xml.bind.annotation.XmlAccessorType; 5 | import javax.xml.bind.annotation.XmlElement; 6 | import javax.xml.bind.annotation.XmlRootElement; 7 | import java.util.ArrayList; 8 | 9 | @XmlRootElement(name = "iso_3166_2_entries") 10 | @XmlAccessorType(XmlAccessType.FIELD) 11 | public class ISO3166_2_Entries { 12 | 13 | @XmlElement(name = "iso_3166_country") 14 | public ArrayList countryEntities; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/model/countries/ISO3166_2_EntryEntity.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.contacts.model.countries; 2 | 3 | import javax.xml.bind.annotation.XmlAccessType; 4 | import javax.xml.bind.annotation.XmlAccessorType; 5 | import javax.xml.bind.annotation.XmlAttribute; 6 | import javax.xml.bind.annotation.XmlRootElement; 7 | 8 | /** 9 | * XML entity class. These classes represent the structure of the XML files 10 | * to be loaded. 11 | */ 12 | @XmlRootElement(name = "iso_3166_subset") 13 | @XmlAccessorType(XmlAccessType.FIELD) class ISO3166_2_EntryEntity { 14 | 15 | @XmlAttribute(name = "code") 16 | public String code; 17 | @XmlAttribute(name = "name") 18 | public String name; 19 | } 20 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/model/countries/ISO3166_2_SubsetEntity.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.contacts.model.countries; 2 | 3 | import javax.xml.bind.annotation.XmlAccessType; 4 | import javax.xml.bind.annotation.XmlAccessorType; 5 | import javax.xml.bind.annotation.XmlAttribute; 6 | import javax.xml.bind.annotation.XmlElement; 7 | import javax.xml.bind.annotation.XmlRootElement; 8 | import java.util.List; 9 | 10 | /** 11 | * XML entity class. These classes represent the structure of the XML files 12 | * to be loaded. 13 | */ 14 | @XmlRootElement(name = "iso_3166_subset") 15 | @XmlAccessorType(XmlAccessType.FIELD) class ISO3166_2_SubsetEntity { 16 | 17 | @XmlElement(name = "iso_3166_2_entry") 18 | public List entryList; 19 | 20 | @XmlAttribute(name = "type") 21 | public String subdivisionType; 22 | } 23 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/ui/about/AboutAuthorView.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.contacts.ui.about; 2 | 3 | import javax.inject.Singleton; 4 | 5 | import de.saxsys.mvvmfx.FxmlView; 6 | import de.saxsys.mvvmfx.InjectViewModel; 7 | import javafx.fxml.FXML; 8 | 9 | @Singleton 10 | public class AboutAuthorView implements FxmlView { 11 | 12 | @InjectViewModel 13 | private AboutAuthorViewModel viewModel; 14 | 15 | @FXML 16 | public void openBlog() { 17 | viewModel.openBlog(); 18 | } 19 | 20 | @FXML 21 | public void openTwitter() { 22 | viewModel.openTwitter(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/ui/about/AboutAuthorViewModel.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.contacts.ui.about; 2 | 3 | import javax.inject.Inject; 4 | 5 | import de.saxsys.mvvmfx.ViewModel; 6 | import javafx.application.HostServices; 7 | 8 | public class AboutAuthorViewModel implements ViewModel { 9 | 10 | @Inject 11 | private HostServices hostServices; 12 | 13 | public void openBlog() { 14 | hostServices.showDocument("http://www.lestard.eu"); 15 | } 16 | 17 | public void openTwitter() { 18 | hostServices.showDocument("https://twitter.com/manuel_mauky"); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/ui/about/profile_manuel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sialcasa/mvvmFX/f195849ca98020ad74056991f147a05db9ce555a/examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/ui/about/profile_manuel.png -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/ui/addcontact/AddContactDialogView.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/ui/addcontact/AddContactDialogView.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.contacts.ui.addcontact; 2 | 3 | import de.saxsys.mvvmfx.FxmlView; 4 | import de.saxsys.mvvmfx.InjectViewModel; 5 | import javafx.stage.Stage; 6 | 7 | public class AddContactDialogView implements FxmlView { 8 | 9 | @InjectViewModel 10 | private AddContactDialogViewModel viewModel; 11 | 12 | private Stage showDialog; 13 | 14 | public void initialize() { 15 | viewModel.subscribe(AddContactDialogViewModel.CLOSE_DIALOG_NOTIFICATION, (key, payload) -> { 16 | showDialog.close(); 17 | }); 18 | } 19 | 20 | public void setDisplayingStage(Stage showDialog) { 21 | this.showDialog = showDialog; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/ui/editcontact/EditContactDialogView.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/ui/main/MainView.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.contacts.ui.main; 2 | 3 | import de.saxsys.mvvmfx.FxmlView; 4 | import de.saxsys.mvvmfx.InjectViewModel; 5 | 6 | public class MainView implements FxmlView { 7 | 8 | @InjectViewModel 9 | private MainViewModel viewModel; 10 | } 11 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/ui/main/MainViewModel.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.contacts.ui.main; 2 | 3 | import de.saxsys.mvvmfx.ScopeProvider; 4 | import de.saxsys.mvvmfx.ViewModel; 5 | import de.saxsys.mvvmfx.examples.contacts.ui.scopes.MasterDetailScope; 6 | 7 | @ScopeProvider(MasterDetailScope.class) 8 | public class MainViewModel implements ViewModel { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/ui/master/MasterView.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.contacts.ui.master; 2 | 3 | import de.saxsys.mvvmfx.FxmlView; 4 | import de.saxsys.mvvmfx.InjectViewModel; 5 | import javafx.fxml.FXML; 6 | import javafx.scene.control.TableView; 7 | 8 | public class MasterView implements FxmlView { 9 | 10 | @FXML 11 | private TableView contactTable; 12 | 13 | @InjectViewModel 14 | private MasterViewModel viewModel; 15 | 16 | public void initialize() { 17 | contactTable.setItems(viewModel.getContactList()); 18 | 19 | viewModel.selectedTableRowProperty().bind(contactTable.getSelectionModel().selectedItemProperty()); 20 | 21 | // When the selectedTableRowProperty changes in the viewModel we need to update the table 22 | viewModel.setOnSelect(vm -> contactTable.getSelectionModel().select(vm)); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/ui/scopes/MasterDetailScope.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.contacts.ui.scopes; 2 | 3 | import de.saxsys.mvvmfx.Scope; 4 | import de.saxsys.mvvmfx.examples.contacts.model.Contact; 5 | import javafx.beans.property.ObjectProperty; 6 | import javafx.beans.property.SimpleObjectProperty; 7 | 8 | public class MasterDetailScope implements Scope { 9 | 10 | private final ObjectProperty selectedContact = new SimpleObjectProperty<>(this, "selectedContact"); 11 | 12 | public ObjectProperty selectedContactProperty() { 13 | return this.selectedContact; 14 | } 15 | 16 | public final Contact getSelectedContact() { 17 | return this.selectedContactProperty().get(); 18 | } 19 | 20 | public final void setSelectedContact(final Contact selectedContact) { 21 | this.selectedContactProperty().set(selectedContact); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/ui/toolbar/ToolbarViewModel.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.contacts.ui.toolbar; 2 | 3 | import de.saxsys.mvvmfx.Scope; 4 | import de.saxsys.mvvmfx.ViewModel; 5 | import de.saxsys.mvvmfx.examples.contacts.ui.scopes.ContactDialogScope; 6 | 7 | import javax.enterprise.inject.Instance; 8 | import javax.inject.Inject; 9 | import java.util.Collections; 10 | import java.util.List; 11 | 12 | public class ToolbarViewModel implements ViewModel { 13 | 14 | @Inject 15 | private Instance scopeInstance; 16 | 17 | public List getScopesForAddDialog() { 18 | return Collections.singletonList(scopeInstance.get()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/java/de/saxsys/mvvmfx/examples/contacts/ui/validators/BirthdayValidator.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.contacts.ui.validators; 2 | 3 | import de.saxsys.mvvmfx.examples.contacts.util.CentralClock; 4 | import de.saxsys.mvvmfx.utils.validation.FunctionBasedValidator; 5 | import de.saxsys.mvvmfx.utils.validation.ValidationMessage; 6 | import javafx.beans.value.ObservableValue; 7 | 8 | import java.time.LocalDate; 9 | import java.util.function.Predicate; 10 | 11 | /** 12 | * @author manuel.mauky 13 | */ 14 | public class BirthdayValidator extends FunctionBasedValidator { 15 | 16 | private static final Predicate birthdayPredicate = date 17 | -> date == null || date.isBefore(LocalDate.now(CentralClock.getClock())); 18 | 19 | public BirthdayValidator(ObservableValue date) { 20 | super(date, birthdayPredicate, ValidationMessage.error("Birthday can't be set in the future")); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/resources/contacts.css: -------------------------------------------------------------------------------- 1 | .invisible-pagination-control .pagination-control { 2 | visibility: hidden; 3 | } 4 | .hyperlink:visited { 5 | -fx-text-fill: -fx-text-base-color; 6 | } 7 | 8 | .hyperlink { 9 | -fx-text-fill: -fx-text-base-color; 10 | } 11 | 12 | .hyperlink:focused { 13 | -fx-border-width: 0px; 14 | } 15 | .hyperlink:hover { 16 | -fx-underline: true; 17 | } 18 | .hyperlink:show-mnemonics > .mnemonic-underline { 19 | -fx-stroke: transparent; 20 | } -------------------------------------------------------------------------------- /examples/contacts-example/src/main/resources/countries/readme.md: -------------------------------------------------------------------------------- 1 | This directory contains XML files with information about existing countries (ISO 3166) and there subdivisions (ISO 3166-2). 2 | 3 | These files are taken from [https://github.com/oodavid/iso-3166-2](https://github.com/oodavid/iso-3166-2). 4 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/resources/default_de.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sialcasa/mvvmFX/f195849ca98020ad74056991f147a05db9ce555a/examples/contacts-example/src/main/resources/default_de.properties -------------------------------------------------------------------------------- /examples/contacts-example/src/main/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /examples/contacts-example/src/main/resources/menu_de.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sialcasa/mvvmFX/f195849ca98020ad74056991f147a05db9ce555a/examples/contacts-example/src/main/resources/menu_de.properties -------------------------------------------------------------------------------- /examples/contacts-example/src/main/resources/menu_en.properties: -------------------------------------------------------------------------------- 1 | 2 | menu.file=File 3 | menu.file.close=Close 4 | menu.edit=Edit 5 | menu.edit.removecontact=Remove contact 6 | menu.help=Help 7 | menu.help.about=About -------------------------------------------------------------------------------- /examples/contacts-example/src/test/java/de/saxsys/mvvmfx/examples/contacts/model/countries/DomCountrySelectorIntegrationTest.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.contacts.model.countries; 2 | 3 | import de.saxsys.mvvmfx.testingutils.JfxToolkitExtension; 4 | import org.junit.jupiter.api.BeforeEach; 5 | import org.junit.jupiter.api.extension.ExtendWith; 6 | 7 | @ExtendWith(JfxToolkitExtension.class) 8 | public class DomCountrySelectorIntegrationTest implements CountrySelectorInterfaceTest { 9 | 10 | private CountrySelector countrySelector; 11 | 12 | @BeforeEach 13 | public void setup(){ 14 | countrySelector = new DomCountrySelector(); 15 | } 16 | 17 | 18 | @Override public CountrySelector getCountrySelector() { 19 | return countrySelector; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /examples/contacts-example/src/test/java/de/saxsys/mvvmfx/examples/contacts/model/countries/JAXBCountrySelectorIntegrationTest.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.contacts.model.countries; 2 | 3 | import de.saxsys.mvvmfx.testingutils.JfxToolkitExtension; 4 | import org.junit.jupiter.api.BeforeEach; 5 | import org.junit.jupiter.api.extension.ExtendWith; 6 | 7 | @ExtendWith(JfxToolkitExtension.class) 8 | public class JAXBCountrySelectorIntegrationTest implements CountrySelectorInterfaceTest { 9 | 10 | private CountrySelector countrySelector; 11 | 12 | @BeforeEach 13 | public void setup() { 14 | countrySelector = new JAXBCountrySelector(); 15 | } 16 | 17 | @Override public CountrySelector getCountrySelector() { 18 | return countrySelector; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /examples/jigsaw-example/app/src/main/java/de/saxsys/mvvmfx/examples/jigsaw/app/AppViewModel.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.jigsaw.app; 2 | 3 | import de.saxsys.mvvmfx.ViewModel; 4 | 5 | public class AppViewModel implements ViewModel {} 6 | -------------------------------------------------------------------------------- /examples/jigsaw-example/app/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | 2 | module de.saxsys.mvvmfx.examples.jigsaw.app{ 3 | 4 | requires de.saxsys.mvvmfx.examples.jigsaw.circle; 5 | requires de.saxsys.mvvmfx.examples.jigsaw.rectangle; 6 | requires javafx.base; 7 | requires javafx.fxml; 8 | requires javafx.controls; 9 | requires javafx.graphics; 10 | requires de.saxsys.mvvmfx; 11 | 12 | exports de.saxsys.mvvmfx.examples.jigsaw.app to javafx.graphics; 13 | 14 | opens de.saxsys.mvvmfx.examples.jigsaw.app to de.saxsys.mvvmfx, javafx.fxml; 15 | } -------------------------------------------------------------------------------- /examples/jigsaw-example/app/src/main/resources/app_de_DE.properties: -------------------------------------------------------------------------------- 1 | app.stage.title=Jigsaw Testanwendung -------------------------------------------------------------------------------- /examples/jigsaw-example/app/src/main/resources/app_en.properties: -------------------------------------------------------------------------------- 1 | app.stage.title=Jigsaw test application -------------------------------------------------------------------------------- /examples/jigsaw-example/app/src/main/resources/de/saxsys/mvvmfx/examples/jigsaw/app/AppView.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 11 | 12 | -------------------------------------------------------------------------------- /examples/jigsaw-example/circle/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | 2 | module de.saxsys.mvvmfx.examples.jigsaw.circle { 3 | 4 | requires javafx.base; 5 | requires javafx.fxml; 6 | requires javafx.controls; 7 | requires javafx.graphics; 8 | requires de.saxsys.mvvmfx; 9 | 10 | exports de.saxsys.mvvmfx.examples.jigsaw.circle; 11 | 12 | opens de.saxsys.mvvmfx.examples.jigsaw.circle to de.saxsys.mvvmfx, javafx.fxml; 13 | } -------------------------------------------------------------------------------- /examples/jigsaw-example/circle/src/main/resources/circle_de.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sialcasa/mvvmFX/f195849ca98020ad74056991f147a05db9ce555a/examples/jigsaw-example/circle/src/main/resources/circle_de.properties -------------------------------------------------------------------------------- /examples/jigsaw-example/circle/src/main/resources/circle_en.properties: -------------------------------------------------------------------------------- 1 | circle.label.circlearea=Circle area:\ 2 | 3 | circle.label.radius=Radius 4 | circle.label.title=Calculate a circular area -------------------------------------------------------------------------------- /examples/jigsaw-example/circle/src/main/resources/de/saxsys/mvvmfx/examples/jigsaw/circle/CircleView.css: -------------------------------------------------------------------------------- 1 | #circleMainBox{ 2 | -fx-alignment: center; 3 | -fx-spacing: 10; 4 | } 5 | 6 | #radiusBox{ 7 | -fx-padding: 0 0 0 20; 8 | -fx-spacing: 70; 9 | } 10 | 11 | #resultBox{ 12 | -fx-padding: 0 0 0 20; 13 | -fx-spacing: 40; 14 | } 15 | 16 | #title{ 17 | -fx-font-weight: bold; 18 | -fx-font-size: 24; 19 | } 20 | 21 | #radiusLabel, #resultLabel, #circleAreaLabel{ 22 | -fx-minWidth: 300; 23 | -fx-font-size: 16; 24 | } 25 | 26 | -------------------------------------------------------------------------------- /examples/jigsaw-example/rectangle/src/main/java/module-info.java: -------------------------------------------------------------------------------- 1 | 2 | module de.saxsys.mvvmfx.examples.jigsaw.rectangle { 3 | 4 | requires javafx.base; 5 | requires javafx.fxml; 6 | requires javafx.controls; 7 | requires javafx.graphics; 8 | requires de.saxsys.mvvmfx; 9 | 10 | exports de.saxsys.mvvmfx.examples.jigsaw.rectangle; 11 | 12 | opens de.saxsys.mvvmfx.examples.jigsaw.rectangle to de.saxsys.mvvmfx, javafx.fxml; 13 | } -------------------------------------------------------------------------------- /examples/jigsaw-example/rectangle/src/main/resources/de/saxsys/mvvmfx/examples/jigsaw/rectangle/Rectangle.css: -------------------------------------------------------------------------------- 1 | #rectangleMainBox{ 2 | -fx-alignment: center; 3 | -fx-spacing: 10; 4 | } 5 | 6 | #firstSideBox, #secondSideBox{ 7 | -fx-padding: 0 0 0 20; 8 | -fx-spacing: 70; 9 | } 10 | 11 | #resultBox{ 12 | -fx-padding: 0 0 0 20; 13 | -fx-spacing: 10; 14 | } 15 | 16 | #title{ 17 | -fx-font-weight: bold; 18 | -fx-font-size: 24; 19 | } 20 | 21 | #firstSideLabel, #secondSideLabel, #resultLabel, #rectangularAreaLabel{ 22 | -fx-minWidth: 300; 23 | -fx-font-size: 16; 24 | } -------------------------------------------------------------------------------- /examples/jigsaw-example/rectangle/src/main/resources/rectangle_de.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sialcasa/mvvmFX/f195849ca98020ad74056991f147a05db9ce555a/examples/jigsaw-example/rectangle/src/main/resources/rectangle_de.properties -------------------------------------------------------------------------------- /examples/jigsaw-example/rectangle/src/main/resources/rectangle_en.properties: -------------------------------------------------------------------------------- 1 | rectangle.label.firstside=Side 1 2 | rectangle.label.rectangulararea=Rectangular area: 3 | rectangle.label.secondside=Side 2 4 | rectangle.label.title=Calculate a rectangular area -------------------------------------------------------------------------------- /examples/mini-examples/async-todoapp-futures/src/main/java/de/saxsys/mvvmfx/examples/async_todoapp_futures/model/TodoItemService.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.async_todoapp_futures.model; 2 | 3 | 4 | import javax.inject.Singleton; 5 | import java.util.List; 6 | 7 | @Singleton 8 | public interface TodoItemService { 9 | 10 | void createItem(TodoItem item); 11 | 12 | void deleteItem(TodoItem item); 13 | 14 | TodoItem getItemById(String id); 15 | 16 | List getAllItems(); 17 | 18 | } -------------------------------------------------------------------------------- /examples/mini-examples/async-todoapp-futures/src/main/java/de/saxsys/mvvmfx/examples/async_todoapp_futures/ui/MainView.java: -------------------------------------------------------------------------------- 1 | package de.saxsys.mvvmfx.examples.async_todoapp_futures.ui; 2 | 3 | import de.saxsys.mvvmfx.FxmlView; 4 | import de.saxsys.mvvmfx.InjectViewModel; 5 | import javafx.fxml.FXML; 6 | import javafx.scene.control.Label; 7 | 8 | public class MainView implements FxmlView { 9 | 10 | @FXML 11 | public Label errorLabel; 12 | 13 | @InjectViewModel 14 | private MainViewModel viewModel; 15 | 16 | public void initialize() { 17 | errorLabel.textProperty().bind(viewModel.errorTextProperty()); 18 | 19 | errorLabel.visibleProperty().bind(viewModel.errorVisibleProperty()); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /examples/mini-examples/async-todoapp-futures/src/main/resources/de/saxsys/mvvmfx/examples/async_todoapp_futures/ui/ControlsView.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |