The following document contains the results of Rat (Release Audit Tool).
***************************************************** Summary ------- Generated at: 2024-10-04T11:14:29+02:00 Notes: 0 Binaries: 1 Archives: 0 Standards: 226 Apache Licensed: 1 Generated Documents: 0 JavaDocs are generated, thus a license header is optional. Generated files do not require license headers. 225 Unknown Licenses ***************************************************** Files with unapproved licenses: .eclipse-pmd checkstyle-config.xml CODE_OF_CONDUCT.md CONTRIBUTING.md coverity.bat eclipseCleanUp.xml eclipseCodeFormatter.xml eclipseCodeTemplates.xml generatorCountries.bat generatorCountries.sh generatorCurrencies.bat generatorCurrencies.sh generatorLanguages.bat generatorLanguages.sh generatorPhoneAreaCodes.bat generatorPhoneAreaCodes.sh generatorTLD.bat generatorTLD.sh Jenkinsfile PMD.xml pom.xml README.md src/main/java/de/powerstat/validation/comparators/ComparatorEMailByDomain.java src/main/java/de/powerstat/validation/comparators/package-info.java src/main/java/de/powerstat/validation/containers/GroupOf.java src/main/java/de/powerstat/validation/containers/HistoryOf.java src/main/java/de/powerstat/validation/containers/NTuple15.java src/main/java/de/powerstat/validation/containers/NTuple16.java src/main/java/de/powerstat/validation/containers/NTuple2.java src/main/java/de/powerstat/validation/containers/NTuple3.java src/main/java/de/powerstat/validation/containers/NTuple4.java src/main/java/de/powerstat/validation/containers/NTuple9.java src/main/java/de/powerstat/validation/containers/package-info.java src/main/java/de/powerstat/validation/entities/package-info.java src/main/java/de/powerstat/validation/entities/Person.java src/main/java/de/powerstat/validation/interfaces/IAggregateRoot.java src/main/java/de/powerstat/validation/interfaces/IDomainEvent.java src/main/java/de/powerstat/validation/interfaces/IEntity.java src/main/java/de/powerstat/validation/interfaces/IService.java src/main/java/de/powerstat/validation/interfaces/IValueObject.java src/main/java/de/powerstat/validation/interfaces/package-info.java src/main/java/de/powerstat/validation/package-info.java src/main/java/de/powerstat/validation/ValidationUtils.java src/main/java/de/powerstat/validation/values/Address.java src/main/java/de/powerstat/validation/values/AddressWithWGS84Position.java src/main/java/de/powerstat/validation/values/BFPONumber.java src/main/java/de/powerstat/validation/values/BIC.java src/main/java/de/powerstat/validation/values/Block.java src/main/java/de/powerstat/validation/values/BloodGroup.java src/main/java/de/powerstat/validation/values/BuildingName.java src/main/java/de/powerstat/validation/values/BuildingNr.java src/main/java/de/powerstat/validation/values/CalendarSystems.java src/main/java/de/powerstat/validation/values/City.java src/main/java/de/powerstat/validation/values/Country.java src/main/java/de/powerstat/validation/values/Currency.java src/main/java/de/powerstat/validation/values/Day.java src/main/java/de/powerstat/validation/values/Days.java src/main/java/de/powerstat/validation/values/Department.java src/main/java/de/powerstat/validation/values/DisplayAspectRatio.java src/main/java/de/powerstat/validation/values/District.java src/main/java/de/powerstat/validation/values/EMail.java src/main/java/de/powerstat/validation/values/Firstname.java src/main/java/de/powerstat/validation/values/Gender.java src/main/java/de/powerstat/validation/values/GregorianCalendar.java src/main/java/de/powerstat/validation/values/GregorianDate.java src/main/java/de/powerstat/validation/values/Hostname.java src/main/java/de/powerstat/validation/values/Hour.java src/main/java/de/powerstat/validation/values/Hours.java src/main/java/de/powerstat/validation/values/IBAN.java src/main/java/de/powerstat/validation/values/impl/IBANVerifier.java src/main/java/de/powerstat/validation/values/impl/IBANVerifierAbstractFactory.java src/main/java/de/powerstat/validation/values/impl/package-info.java src/main/java/de/powerstat/validation/values/IPV4Address.java src/main/java/de/powerstat/validation/values/IPV4Mask.java src/main/java/de/powerstat/validation/values/IPV6Address.java src/main/java/de/powerstat/validation/values/IPV6Mask.java src/main/java/de/powerstat/validation/values/Language.java src/main/java/de/powerstat/validation/values/Lastname.java src/main/java/de/powerstat/validation/values/Lines.java src/main/java/de/powerstat/validation/values/MACAddress.java src/main/java/de/powerstat/validation/values/Millisecond.java src/main/java/de/powerstat/validation/values/Milliseconds.java src/main/java/de/powerstat/validation/values/Minute.java src/main/java/de/powerstat/validation/values/Minutes.java src/main/java/de/powerstat/validation/values/Month.java src/main/java/de/powerstat/validation/values/MonthDay.java src/main/java/de/powerstat/validation/values/Months.java src/main/java/de/powerstat/validation/values/Neighbourhood.java src/main/java/de/powerstat/validation/values/package-info.java src/main/java/de/powerstat/validation/values/Password.java src/main/java/de/powerstat/validation/values/Percent.java src/main/java/de/powerstat/validation/values/PoBoxNumber.java src/main/java/de/powerstat/validation/values/Port.java src/main/java/de/powerstat/validation/values/PostalCode.java src/main/java/de/powerstat/validation/values/Province.java src/main/java/de/powerstat/validation/values/ScreenSize.java src/main/java/de/powerstat/validation/values/Second.java src/main/java/de/powerstat/validation/values/Seconds.java src/main/java/de/powerstat/validation/values/SIBaseUnits.java src/main/java/de/powerstat/validation/values/SIDerivedUnits.java src/main/java/de/powerstat/validation/values/SIPrefixes.java src/main/java/de/powerstat/validation/values/strategies/IPasswordStrategy.java src/main/java/de/powerstat/validation/values/strategies/IUsernameStrategy.java src/main/java/de/powerstat/validation/values/strategies/package-info.java src/main/java/de/powerstat/validation/values/strategies/PasswordConfigurableStrategy.java src/main/java/de/powerstat/validation/values/strategies/PasswordDefaultStrategy.java src/main/java/de/powerstat/validation/values/strategies/UsernameConfigurableStrategy.java src/main/java/de/powerstat/validation/values/strategies/UsernameDefaultStrategy.java src/main/java/de/powerstat/validation/values/Street.java src/main/java/de/powerstat/validation/values/SubBuilding.java src/main/java/de/powerstat/validation/values/TopLevelDomain.java src/main/java/de/powerstat/validation/values/Username.java src/main/java/de/powerstat/validation/values/UUID.java src/main/java/de/powerstat/validation/values/Week.java src/main/java/de/powerstat/validation/values/Weekday.java src/main/java/de/powerstat/validation/values/Weeks.java src/main/java/de/powerstat/validation/values/WGS84Position.java src/main/java/de/powerstat/validation/values/Year.java src/main/java/de/powerstat/validation/values/Years.java src/main/java/module-info.java src/site/asciidoc/architecture/01_introduction_and_goals.adoc src/site/asciidoc/architecture/02_architecture_constraints.adoc src/site/asciidoc/architecture/03_system_scope_and_context.adoc src/site/asciidoc/architecture/04_solution_strategy.adoc src/site/asciidoc/architecture/05_building_block_view.adoc src/site/asciidoc/architecture/06_runtime_view.adoc src/site/asciidoc/architecture/07_deployment_view.adoc src/site/asciidoc/architecture/08_concepts.adoc src/site/asciidoc/architecture/09_architecture_decisions.adoc src/site/asciidoc/architecture/10_quality_requirements.adoc src/site/asciidoc/architecture/11_technical_risks.adoc src/site/asciidoc/architecture/12_glossary.adoc src/site/asciidoc/architecture/about-arc42.adoc src/site/asciidoc/architecture/config.adoc src/site/asciidoc/index.adoc src/test/java/de/powerstat/validation/comparators/test/ComparatorEMailByDomainTests.java src/test/java/de/powerstat/validation/comparators/test/package-info.java src/test/java/de/powerstat/validation/containers/test/GroupOfTests.java src/test/java/de/powerstat/validation/containers/test/HistoryOfTests.java src/test/java/de/powerstat/validation/containers/test/NTuple15Tests.java src/test/java/de/powerstat/validation/containers/test/NTuple16Tests.java src/test/java/de/powerstat/validation/containers/test/NTuple2Tests.java src/test/java/de/powerstat/validation/containers/test/NTuple3Tests.java src/test/java/de/powerstat/validation/containers/test/NTuple4Tests.java src/test/java/de/powerstat/validation/containers/test/NTuple9Tests.java src/test/java/de/powerstat/validation/containers/test/package-info.java src/test/java/de/powerstat/validation/entities/test/package-info.java src/test/java/de/powerstat/validation/entities/test/PersonTests.java src/test/java/de/powerstat/validation/test/package-info.java src/test/java/de/powerstat/validation/test/ValidationUtilsTests.java src/test/java/de/powerstat/validation/values/impl/test/IBANVerifierTests.java src/test/java/de/powerstat/validation/values/impl/test/package-info.java src/test/java/de/powerstat/validation/values/strategies/test/package-info.java src/test/java/de/powerstat/validation/values/strategies/test/PasswordConfigurableStrategyTests.java src/test/java/de/powerstat/validation/values/strategies/test/UsernameConfigurableStrategyTests.java src/test/java/de/powerstat/validation/values/test/AddressTests.java src/test/java/de/powerstat/validation/values/test/AddressWithWGS84PositionTests.java src/test/java/de/powerstat/validation/values/test/BFPONumberTests.java src/test/java/de/powerstat/validation/values/test/BICTests.java src/test/java/de/powerstat/validation/values/test/BlockTests.java src/test/java/de/powerstat/validation/values/test/BloodGroupTests.java src/test/java/de/powerstat/validation/values/test/BuildingNameTests.java src/test/java/de/powerstat/validation/values/test/BuildingNrTests.java src/test/java/de/powerstat/validation/values/test/CalendarSystemsTests.java src/test/java/de/powerstat/validation/values/test/CityTests.java src/test/java/de/powerstat/validation/values/test/CountryTests.java src/test/java/de/powerstat/validation/values/test/CurrencyTests.java src/test/java/de/powerstat/validation/values/test/DaysTests.java src/test/java/de/powerstat/validation/values/test/DayTests.java src/test/java/de/powerstat/validation/values/test/DepartmentTests.java src/test/java/de/powerstat/validation/values/test/DisplayAspectRatioTests.java src/test/java/de/powerstat/validation/values/test/DistrictTests.java src/test/java/de/powerstat/validation/values/test/EMailTests.java src/test/java/de/powerstat/validation/values/test/FirstnameTests.java src/test/java/de/powerstat/validation/values/test/GenderTests.java src/test/java/de/powerstat/validation/values/test/GregorianCalendarTests.java src/test/java/de/powerstat/validation/values/test/GregorianDateTests.java src/test/java/de/powerstat/validation/values/test/HostnameTests.java src/test/java/de/powerstat/validation/values/test/HoursTests.java src/test/java/de/powerstat/validation/values/test/HourTests.java src/test/java/de/powerstat/validation/values/test/IBANTests.java src/test/java/de/powerstat/validation/values/test/IPV4AddressTests.java src/test/java/de/powerstat/validation/values/test/IPV4MaskTests.java src/test/java/de/powerstat/validation/values/test/IPV6AddressTests.java src/test/java/de/powerstat/validation/values/test/IPV6MaskTests.java src/test/java/de/powerstat/validation/values/test/LanguageTests.java src/test/java/de/powerstat/validation/values/test/LastnameTests.java src/test/java/de/powerstat/validation/values/test/LinesTests.java src/test/java/de/powerstat/validation/values/test/MACAddressTests.java src/test/java/de/powerstat/validation/values/test/MillisecondsTests.java src/test/java/de/powerstat/validation/values/test/MillisecondTests.java src/test/java/de/powerstat/validation/values/test/MinutesTests.java src/test/java/de/powerstat/validation/values/test/MinuteTests.java src/test/java/de/powerstat/validation/values/test/MonthDayTests.java src/test/java/de/powerstat/validation/values/test/MonthsTests.java src/test/java/de/powerstat/validation/values/test/MonthTests.java src/test/java/de/powerstat/validation/values/test/NeighbourhoodTests.java src/test/java/de/powerstat/validation/values/test/package-info.java src/test/java/de/powerstat/validation/values/test/PasswordTests.java src/test/java/de/powerstat/validation/values/test/PercentTests.java src/test/java/de/powerstat/validation/values/test/PoBoxNumberTests.java src/test/java/de/powerstat/validation/values/test/PortTests.java src/test/java/de/powerstat/validation/values/test/PostalCodeTests.java src/test/java/de/powerstat/validation/values/test/ProvinceTests.java src/test/java/de/powerstat/validation/values/test/ScreenSizeTests.java src/test/java/de/powerstat/validation/values/test/SecondsTests.java src/test/java/de/powerstat/validation/values/test/SecondTests.java src/test/java/de/powerstat/validation/values/test/SIBaseUnitsTests.java src/test/java/de/powerstat/validation/values/test/SIDerivedUnitsTests.java src/test/java/de/powerstat/validation/values/test/SIPrefixesTests.java src/test/java/de/powerstat/validation/values/test/StreetTests.java src/test/java/de/powerstat/validation/values/test/SubBuildingTests.java src/test/java/de/powerstat/validation/values/test/TopLevelDomainTests.java src/test/java/de/powerstat/validation/values/test/UsernameTests.java src/test/java/de/powerstat/validation/values/test/UUIDTests.java src/test/java/de/powerstat/validation/values/test/WeekdayTests.java src/test/java/de/powerstat/validation/values/test/WeeksTests.java src/test/java/de/powerstat/validation/values/test/WeekTests.java src/test/java/de/powerstat/validation/values/test/WGS84PositionTests.java src/test/java/de/powerstat/validation/values/test/YearsTests.java src/test/java/de/powerstat/validation/values/test/YearTests.java src/test/java/module-info.java src/test/resources/log4j2.properties TODOS.md uml.svg ***************************************************** ***************************************************** Files with Apache License headers will be marked AL Binary files (which do not require any license headers) will be marked B Compressed archives will be marked A Notices, licenses etc. will be marked N !????? .eclipse-pmd !????? checkstyle-config.xml !????? CODE_OF_CONDUCT.md !????? CONTRIBUTING.md !????? coverity.bat !????? eclipseCleanUp.xml !????? eclipseCodeFormatter.xml !????? eclipseCodeTemplates.xml !????? generatorCountries.bat !????? generatorCountries.sh !????? generatorCurrencies.bat !????? generatorCurrencies.sh !????? generatorLanguages.bat !????? generatorLanguages.sh !????? generatorPhoneAreaCodes.bat !????? generatorPhoneAreaCodes.sh !????? generatorTLD.bat !????? generatorTLD.sh !????? Jenkinsfile AL LICENSE.md !????? PMD.xml !????? pom.xml !????? README.md !????? src/main/java/de/powerstat/validation/comparators/ComparatorEMailByDomain.java !????? src/main/java/de/powerstat/validation/comparators/package-info.java !????? src/main/java/de/powerstat/validation/containers/GroupOf.java !????? src/main/java/de/powerstat/validation/containers/HistoryOf.java !????? src/main/java/de/powerstat/validation/containers/NTuple15.java !????? src/main/java/de/powerstat/validation/containers/NTuple16.java !????? src/main/java/de/powerstat/validation/containers/NTuple2.java !????? src/main/java/de/powerstat/validation/containers/NTuple3.java !????? src/main/java/de/powerstat/validation/containers/NTuple4.java !????? src/main/java/de/powerstat/validation/containers/NTuple9.java !????? src/main/java/de/powerstat/validation/containers/package-info.java !????? src/main/java/de/powerstat/validation/entities/package-info.java !????? src/main/java/de/powerstat/validation/entities/Person.java !????? src/main/java/de/powerstat/validation/interfaces/IAggregateRoot.java !????? src/main/java/de/powerstat/validation/interfaces/IDomainEvent.java !????? src/main/java/de/powerstat/validation/interfaces/IEntity.java !????? src/main/java/de/powerstat/validation/interfaces/IService.java !????? src/main/java/de/powerstat/validation/interfaces/IValueObject.java !????? src/main/java/de/powerstat/validation/interfaces/package-info.java !????? src/main/java/de/powerstat/validation/package-info.java !????? src/main/java/de/powerstat/validation/ValidationUtils.java !????? src/main/java/de/powerstat/validation/values/Address.java !????? src/main/java/de/powerstat/validation/values/AddressWithWGS84Position.java !????? src/main/java/de/powerstat/validation/values/BFPONumber.java !????? src/main/java/de/powerstat/validation/values/BIC.java !????? src/main/java/de/powerstat/validation/values/Block.java !????? src/main/java/de/powerstat/validation/values/BloodGroup.java !????? src/main/java/de/powerstat/validation/values/BuildingName.java !????? src/main/java/de/powerstat/validation/values/BuildingNr.java !????? src/main/java/de/powerstat/validation/values/CalendarSystems.java !????? src/main/java/de/powerstat/validation/values/City.java !????? src/main/java/de/powerstat/validation/values/Country.java !????? src/main/java/de/powerstat/validation/values/Currency.java !????? src/main/java/de/powerstat/validation/values/Day.java !????? src/main/java/de/powerstat/validation/values/Days.java !????? src/main/java/de/powerstat/validation/values/Department.java !????? src/main/java/de/powerstat/validation/values/DisplayAspectRatio.java !????? src/main/java/de/powerstat/validation/values/District.java !????? src/main/java/de/powerstat/validation/values/EMail.java !????? src/main/java/de/powerstat/validation/values/Firstname.java !????? src/main/java/de/powerstat/validation/values/Gender.java !????? src/main/java/de/powerstat/validation/values/GregorianCalendar.java !????? src/main/java/de/powerstat/validation/values/GregorianDate.java !????? src/main/java/de/powerstat/validation/values/Hostname.java !????? src/main/java/de/powerstat/validation/values/Hour.java !????? src/main/java/de/powerstat/validation/values/Hours.java !????? src/main/java/de/powerstat/validation/values/IBAN.java !????? src/main/java/de/powerstat/validation/values/impl/IBANVerifier.java !????? src/main/java/de/powerstat/validation/values/impl/IBANVerifierAbstractFactory.java !????? src/main/java/de/powerstat/validation/values/impl/package-info.java !????? src/main/java/de/powerstat/validation/values/IPV4Address.java !????? src/main/java/de/powerstat/validation/values/IPV4Mask.java !????? src/main/java/de/powerstat/validation/values/IPV6Address.java !????? src/main/java/de/powerstat/validation/values/IPV6Mask.java !????? src/main/java/de/powerstat/validation/values/Language.java !????? src/main/java/de/powerstat/validation/values/Lastname.java !????? src/main/java/de/powerstat/validation/values/Lines.java !????? src/main/java/de/powerstat/validation/values/MACAddress.java !????? src/main/java/de/powerstat/validation/values/Millisecond.java !????? src/main/java/de/powerstat/validation/values/Milliseconds.java !????? src/main/java/de/powerstat/validation/values/Minute.java !????? src/main/java/de/powerstat/validation/values/Minutes.java !????? src/main/java/de/powerstat/validation/values/Month.java !????? src/main/java/de/powerstat/validation/values/MonthDay.java !????? src/main/java/de/powerstat/validation/values/Months.java !????? src/main/java/de/powerstat/validation/values/Neighbourhood.java !????? src/main/java/de/powerstat/validation/values/package-info.java !????? src/main/java/de/powerstat/validation/values/Password.java !????? src/main/java/de/powerstat/validation/values/Percent.java !????? src/main/java/de/powerstat/validation/values/PoBoxNumber.java !????? src/main/java/de/powerstat/validation/values/Port.java !????? src/main/java/de/powerstat/validation/values/PostalCode.java !????? src/main/java/de/powerstat/validation/values/Province.java !????? src/main/java/de/powerstat/validation/values/ScreenSize.java !????? src/main/java/de/powerstat/validation/values/Second.java !????? src/main/java/de/powerstat/validation/values/Seconds.java !????? src/main/java/de/powerstat/validation/values/SIBaseUnits.java !????? src/main/java/de/powerstat/validation/values/SIDerivedUnits.java !????? src/main/java/de/powerstat/validation/values/SIPrefixes.java !????? src/main/java/de/powerstat/validation/values/strategies/IPasswordStrategy.java !????? src/main/java/de/powerstat/validation/values/strategies/IUsernameStrategy.java !????? src/main/java/de/powerstat/validation/values/strategies/package-info.java !????? src/main/java/de/powerstat/validation/values/strategies/PasswordConfigurableStrategy.java !????? src/main/java/de/powerstat/validation/values/strategies/PasswordDefaultStrategy.java !????? src/main/java/de/powerstat/validation/values/strategies/UsernameConfigurableStrategy.java !????? src/main/java/de/powerstat/validation/values/strategies/UsernameDefaultStrategy.java !????? src/main/java/de/powerstat/validation/values/Street.java !????? src/main/java/de/powerstat/validation/values/SubBuilding.java !????? src/main/java/de/powerstat/validation/values/TopLevelDomain.java !????? src/main/java/de/powerstat/validation/values/Username.java !????? src/main/java/de/powerstat/validation/values/UUID.java !????? src/main/java/de/powerstat/validation/values/Week.java !????? src/main/java/de/powerstat/validation/values/Weekday.java !????? src/main/java/de/powerstat/validation/values/Weeks.java !????? src/main/java/de/powerstat/validation/values/WGS84Position.java !????? src/main/java/de/powerstat/validation/values/Year.java !????? src/main/java/de/powerstat/validation/values/Years.java !????? src/main/java/module-info.java !????? src/site/asciidoc/architecture/01_introduction_and_goals.adoc !????? src/site/asciidoc/architecture/02_architecture_constraints.adoc !????? src/site/asciidoc/architecture/03_system_scope_and_context.adoc !????? src/site/asciidoc/architecture/04_solution_strategy.adoc !????? src/site/asciidoc/architecture/05_building_block_view.adoc !????? src/site/asciidoc/architecture/06_runtime_view.adoc !????? src/site/asciidoc/architecture/07_deployment_view.adoc !????? src/site/asciidoc/architecture/08_concepts.adoc !????? src/site/asciidoc/architecture/09_architecture_decisions.adoc !????? src/site/asciidoc/architecture/10_quality_requirements.adoc !????? src/site/asciidoc/architecture/11_technical_risks.adoc !????? src/site/asciidoc/architecture/12_glossary.adoc !????? src/site/asciidoc/architecture/about-arc42.adoc !????? src/site/asciidoc/architecture/config.adoc B src/site/asciidoc/architecture/images/arc42-logo.png !????? src/site/asciidoc/index.adoc !????? src/test/java/de/powerstat/validation/comparators/test/ComparatorEMailByDomainTests.java !????? src/test/java/de/powerstat/validation/comparators/test/package-info.java !????? src/test/java/de/powerstat/validation/containers/test/GroupOfTests.java !????? src/test/java/de/powerstat/validation/containers/test/HistoryOfTests.java !????? src/test/java/de/powerstat/validation/containers/test/NTuple15Tests.java !????? src/test/java/de/powerstat/validation/containers/test/NTuple16Tests.java !????? src/test/java/de/powerstat/validation/containers/test/NTuple2Tests.java !????? src/test/java/de/powerstat/validation/containers/test/NTuple3Tests.java !????? src/test/java/de/powerstat/validation/containers/test/NTuple4Tests.java !????? src/test/java/de/powerstat/validation/containers/test/NTuple9Tests.java !????? src/test/java/de/powerstat/validation/containers/test/package-info.java !????? src/test/java/de/powerstat/validation/entities/test/package-info.java !????? src/test/java/de/powerstat/validation/entities/test/PersonTests.java !????? src/test/java/de/powerstat/validation/test/package-info.java !????? src/test/java/de/powerstat/validation/test/ValidationUtilsTests.java !????? src/test/java/de/powerstat/validation/values/impl/test/IBANVerifierTests.java !????? src/test/java/de/powerstat/validation/values/impl/test/package-info.java !????? src/test/java/de/powerstat/validation/values/strategies/test/package-info.java !????? src/test/java/de/powerstat/validation/values/strategies/test/PasswordConfigurableStrategyTests.java !????? src/test/java/de/powerstat/validation/values/strategies/test/UsernameConfigurableStrategyTests.java !????? src/test/java/de/powerstat/validation/values/test/AddressTests.java !????? src/test/java/de/powerstat/validation/values/test/AddressWithWGS84PositionTests.java !????? src/test/java/de/powerstat/validation/values/test/BFPONumberTests.java !????? src/test/java/de/powerstat/validation/values/test/BICTests.java !????? src/test/java/de/powerstat/validation/values/test/BlockTests.java !????? src/test/java/de/powerstat/validation/values/test/BloodGroupTests.java !????? src/test/java/de/powerstat/validation/values/test/BuildingNameTests.java !????? src/test/java/de/powerstat/validation/values/test/BuildingNrTests.java !????? src/test/java/de/powerstat/validation/values/test/CalendarSystemsTests.java !????? src/test/java/de/powerstat/validation/values/test/CityTests.java !????? src/test/java/de/powerstat/validation/values/test/CountryTests.java !????? src/test/java/de/powerstat/validation/values/test/CurrencyTests.java !????? src/test/java/de/powerstat/validation/values/test/DaysTests.java !????? src/test/java/de/powerstat/validation/values/test/DayTests.java !????? src/test/java/de/powerstat/validation/values/test/DepartmentTests.java !????? src/test/java/de/powerstat/validation/values/test/DisplayAspectRatioTests.java !????? src/test/java/de/powerstat/validation/values/test/DistrictTests.java !????? src/test/java/de/powerstat/validation/values/test/EMailTests.java !????? src/test/java/de/powerstat/validation/values/test/FirstnameTests.java !????? src/test/java/de/powerstat/validation/values/test/GenderTests.java !????? src/test/java/de/powerstat/validation/values/test/GregorianCalendarTests.java !????? src/test/java/de/powerstat/validation/values/test/GregorianDateTests.java !????? src/test/java/de/powerstat/validation/values/test/HostnameTests.java !????? src/test/java/de/powerstat/validation/values/test/HoursTests.java !????? src/test/java/de/powerstat/validation/values/test/HourTests.java !????? src/test/java/de/powerstat/validation/values/test/IBANTests.java !????? src/test/java/de/powerstat/validation/values/test/IPV4AddressTests.java !????? src/test/java/de/powerstat/validation/values/test/IPV4MaskTests.java !????? src/test/java/de/powerstat/validation/values/test/IPV6AddressTests.java !????? src/test/java/de/powerstat/validation/values/test/IPV6MaskTests.java !????? src/test/java/de/powerstat/validation/values/test/LanguageTests.java !????? src/test/java/de/powerstat/validation/values/test/LastnameTests.java !????? src/test/java/de/powerstat/validation/values/test/LinesTests.java !????? src/test/java/de/powerstat/validation/values/test/MACAddressTests.java !????? src/test/java/de/powerstat/validation/values/test/MillisecondsTests.java !????? src/test/java/de/powerstat/validation/values/test/MillisecondTests.java !????? src/test/java/de/powerstat/validation/values/test/MinutesTests.java !????? src/test/java/de/powerstat/validation/values/test/MinuteTests.java !????? src/test/java/de/powerstat/validation/values/test/MonthDayTests.java !????? src/test/java/de/powerstat/validation/values/test/MonthsTests.java !????? src/test/java/de/powerstat/validation/values/test/MonthTests.java !????? src/test/java/de/powerstat/validation/values/test/NeighbourhoodTests.java !????? src/test/java/de/powerstat/validation/values/test/package-info.java !????? src/test/java/de/powerstat/validation/values/test/PasswordTests.java !????? src/test/java/de/powerstat/validation/values/test/PercentTests.java !????? src/test/java/de/powerstat/validation/values/test/PoBoxNumberTests.java !????? src/test/java/de/powerstat/validation/values/test/PortTests.java !????? src/test/java/de/powerstat/validation/values/test/PostalCodeTests.java !????? src/test/java/de/powerstat/validation/values/test/ProvinceTests.java !????? src/test/java/de/powerstat/validation/values/test/ScreenSizeTests.java !????? src/test/java/de/powerstat/validation/values/test/SecondsTests.java !????? src/test/java/de/powerstat/validation/values/test/SecondTests.java !????? src/test/java/de/powerstat/validation/values/test/SIBaseUnitsTests.java !????? src/test/java/de/powerstat/validation/values/test/SIDerivedUnitsTests.java !????? src/test/java/de/powerstat/validation/values/test/SIPrefixesTests.java !????? src/test/java/de/powerstat/validation/values/test/StreetTests.java !????? src/test/java/de/powerstat/validation/values/test/SubBuildingTests.java !????? src/test/java/de/powerstat/validation/values/test/TopLevelDomainTests.java !????? src/test/java/de/powerstat/validation/values/test/UsernameTests.java !????? src/test/java/de/powerstat/validation/values/test/UUIDTests.java !????? src/test/java/de/powerstat/validation/values/test/WeekdayTests.java !????? src/test/java/de/powerstat/validation/values/test/WeeksTests.java !????? src/test/java/de/powerstat/validation/values/test/WeekTests.java !????? src/test/java/de/powerstat/validation/values/test/WGS84PositionTests.java !????? src/test/java/de/powerstat/validation/values/test/YearsTests.java !????? src/test/java/de/powerstat/validation/values/test/YearTests.java !????? src/test/java/module-info.java !????? src/test/resources/log4j2.properties !????? TODOS.md !????? uml.svg ***************************************************** Printing headers for text files without a valid license header... ===================================================== == File: .eclipse-pmd ===================================================== <?xml version="1.0" encoding="UTF-8"?> <eclipse-pmd xmlns="http://acanda.ch/eclipse-pmd/0.8" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://acanda.ch/eclipse-pmd/0.8 http://acanda.ch/eclipse-pmd/eclipse-pmd-0.8.xsd"> <analysis enabled="true" /> <rulesets> <ruleset name="PowerStat Rules" ref="PMD.xml" refcontext="project" /> </rulesets> </eclipse-pmd> ===================================================== == File: checkstyle-config.xml ===================================================== <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE module PUBLIC "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN" "https://checkstyle.org/dtds/configuration_1_3.dtd"> <module name="Checker"> <property name="severity" value="warning"/> <module name="TreeWalker"> <!-- Annotations --> <module name="AnnotationLocation"> <property name="allowSamelineMultipleAnnotations" value="false"/> <property name="allowSamelineSingleParameterlessAnnotation" value="true"/> <property name="allowSamelineParameterizedAnnotation" value="false"/> <property name="tokens" value="CLASS_DEF, INTERFACE_DEF, PACKAGE_DEF, ENUM_CONSTANT_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF, RECORD_DEF, COMPACT_CTOR_DEF"/> </module> <!-- <module name="AnnotationOnSameLine"> <property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF, RECORD_DEF, COMPACT_CTOR_DEF"/> </module> --> <module name="AnnotationUseStyle"> <property name="closingParens" value="never"/> <property name="elementStyle" value="compact"/> <property name="trailingArrayComma" value="never"/> </module> <module name="MissingDeprecated"> <property name="violateExecutionOnNonTightHtml" value="false"/> </module> <module name="MissingOverride"> <property name="javaFiveCompatibility" value="false"/> </module> <module name="PackageAnnotation"> </module> <module name="SuppressWarnings"> <property name="format" value="^\s*+$"/> <property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, ANNOTATION_DEF, ANNOTATION_FIELD_DEF, ENUM_CONSTANT_DEF, PARAMETER_DEF, VARIABLE_DEF, METHOD_DEF, CTOR_DEF, COMPACT_CTOR_DEF, RECORD_DEF"/> </module> <module name="SuppressWarningsHolder"> <property name="aliasList" value=""/> </module> <!-- Block Checks --> <module name="AvoidNestedBlocks"> <property name="severity" value="warning"/> <property name="allowInSwitchCase" value="false"/> </module> <module name="EmptyBlock"> <property name="severity" value="warning"/> <property name="option" value="text"/> <property name="tokens" value="LITERAL_WHILE, LITERAL_TRY, LITERAL_FINALLY, LITERAL_DO, LITERAL_IF, LITERAL_ELSE, LITERAL_FOR, INSTANCE_INIT, STATIC_INIT, LITERAL_SWITCH, LITERAL_SYNCHRONIZED"/> </module> <module name="EmptyCatchBlock"> ===================================================== == File: CODE_OF_CONDUCT.md ===================================================== # Contributor Covenant Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies within all project spaces, and it also applies when an individual is representing the project or its community in public spaces. Examples of representing a project or community include using an official ===================================================== == File: CONTRIBUTING.md ===================================================== # How to contribute ## Code of Conduct This project and everyone participating in it is governed by the [Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to [powerstat@web.de](mailto:powerstat@web.de). ## I don't want to read this whole thing I just have a question!!! > **Note:** Please don't file an issue to ask a question. You'll get faster results by using the resources below. * [EMail](mailto:powerstat@web.de) ## How to report bugs or enhancements ### Reporting Bugs #### Before Submitting A Bug Report #### How Do I Submit A (Good) Bug Report? ### Suggesting Enhancements #### Before Submitting An Enhancement Suggestion #### How Do I Submit A (Good) Enhancement Suggestion? ## Design Decisions ## Styleguides ### Git Commit Messages ### Issue and Pull Request Labels ### Java Styleguide #### Package Conventions ### PowerStat's TemplateEngine and Packages ### Documentation Styleguide ### Coding conventions ## How to set up your environment and run tests ## Testing We have JUnit 5 based unittests, please write tests for new code you create. ===================================================== == File: coverity.bat ===================================================== @echo off setlocal ENABLEDELAYEDEXPANSION set covbin=D:\Programme\cov-analysis-win64-2022.6.0\bin rem wget https://scan.coverity.com/download/java/win64 --post-data "token=y02AK7p2pBIVfYkPXHQT-w&project=Validation" -O coverity_tool.zip rem %covbin%\cov-configure --java %covbin%\cov-build --dir cov-int mvn clean compile rem curl --form token=y02AK7p2pBIVfYkPXHQT-w --form email=powerstat@web.de --form file=@cov-int.zip --form version="Version" --form description="Description" https://scan.coverity.com/builds?project=Validation endlocal exit /b 0 ===================================================== == File: eclipseCleanUp.xml ===================================================== <?xml version="1.0" encoding="UTF-8" standalone="no"?> <profiles version="2"> <profile kind="CleanUpProfile" name="PowerStat" version="2"> <setting id="cleanup.use_autoboxing" value="false"/> <setting id="cleanup.qualify_static_method_accesses_with_declaring_class" value="false"/> <setting id="cleanup.always_use_this_for_non_static_method_access" value="false"/> <setting id="cleanup.organize_imports" value="true"/> <setting id="cleanup.remove_trailing_whitespaces_ignore_empty" value="false"/> <setting id="cleanup.use_directly_map_method" value="true"/> <setting id="cleanup.format_source_code_changes_only" value="false"/> <setting id="cleanup.qualify_static_field_accesses_with_declaring_class" value="false"/> <setting id="cleanup.add_generated_serial_version_id" value="false"/> <setting id="cleanup.remove_redundant_semicolons" value="true"/> <setting id="cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class" value="true"/> <setting id="cleanup.remove_redundant_type_arguments" value="true"/> <setting id="cleanup.remove_unused_imports" value="true"/> <setting id="cleanup.insert_inferred_type_arguments" value="false"/> <setting id="cleanup.make_private_fields_final" value="true"/> <setting id="cleanup.use_lambda" value="true"/> <setting id="cleanup.simplify_lambda_expression_and_method_ref" value="false"/> <setting id="cleanup.always_use_blocks" value="true"/> <setting id="cleanup.use_this_for_non_static_field_access_only_if_necessary" value="false"/> <setting id="cleanup.sort_members_all" value="false"/> <setting id="cleanup.remove_trailing_whitespaces_all" value="true"/> <setting id="cleanup.add_missing_annotations" value="true"/> <setting id="cleanup.remove_unnecessary_array_creation" value="true"/> <setting id="cleanup.always_use_this_for_non_static_field_access" value="true"/> <setting id="cleanup.make_parameters_final" value="true"/> <setting id="cleanup.sort_members" value="false"/> <setting id="cleanup.remove_private_constructors" value="true"/> <setting id="cleanup.always_use_parentheses_in_expressions" value="true"/> <setting id="cleanup.remove_unused_local_variables" value="false"/> <setting id="cleanup.convert_to_enhanced_for_loop" value="true"/> <setting id="cleanup.remove_unused_private_fields" value="true"/> <setting id="cleanup.remove_redundant_modifiers" value="true"/> <setting id="cleanup.never_use_blocks" value="false"/> <setting id="cleanup.number_suffix" value="true"/> <setting id="cleanup.add_missing_deprecated_annotations" value="true"/> <setting id="cleanup.use_this_for_non_static_field_access" value="true"/> <setting id="cleanup.remove_unnecessary_nls_tags" value="true"/> <setting id="cleanup.qualify_static_member_accesses_through_instances_with_declaring_class" value="true"/> <setting id="cleanup.add_missing_nls_tags" value="false"/> <setting id="cleanup.remove_unnecessary_casts" value="true"/> <setting id="cleanup.use_unboxing" value="false"/> <setting id="cleanup.use_blocks_only_for_return_and_throw" value="false"/> <setting id="cleanup.format_source_code" value="false"/> <setting id="cleanup.convert_functional_interfaces" value="true"/> <setting id="cleanup.add_default_serial_version_id" value="true"/> <setting id="cleanup.remove_unused_private_methods" value="true"/> <setting id="cleanup.remove_trailing_whitespaces" value="true"/> ===================================================== == File: eclipseCodeFormatter.xml ===================================================== <?xml version="1.0" encoding="UTF-8" standalone="no"?> <profiles version="18"> <profile kind="CodeFormatterProfile" name="PowerStat" version="18"> <setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/> <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="common_lines"/> <setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_after_logical_operator" value="insert"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/> <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/> <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/> <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="common_lines"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/> <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="2"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/> <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/> <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="common_lines"/> <setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/> <setting id="org.eclipse.jdt.core.formatter.indentation.size" value="2"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/> <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" value="common_lines"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default" value="insert"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/> <setting id="org.eclipse.jdt.core.formatter.align_with_spaces" value="false"/> <setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/> <setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/> <setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block" value="0"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions" value="do not insert"/> <setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="48"/> <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="2"/> <setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body" value="0"/> <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="2"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/> <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="common_lines"/> <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="0"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/> <setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/> <setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/> <setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/> <setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" value="true"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="do not insert"/> <setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="0"/> ===================================================== == File: eclipseCodeTemplates.xml ===================================================== <?xml version="1.0" encoding="UTF-8" standalone="no"?><templates><template autoinsert="false" context="catchblock_context" deleted="false" description="Code in new catch blocks" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.catchblock" name="catchblock"/></templates> ===================================================== == File: generatorCountries.bat ===================================================== @echo off rem Generate Java class source from tld text file. rem rem $0 script rem $1 Path to downloaded file setlocal ENABLEDELAYEDEXPANSION pushd %~dp0 echo /* echo * Code generator Copyright (C) 2020 Dipl.-Inform. Kai Hofmann. All rights reserved! echo */ echo package de.powerstat.validation.generated; echo: echo: echo import java.util.Map; echo import java.util.Locale; echo import java.util.concurrent.ConcurrentHashMap; echo: echo: echo /** echo * ISO 3166 Alpha 2. echo */ echo public final class GeneratedISO3166A2 echo { echo /** echo * Alpha 2 codes map. echo */ echo private static final Map^<String, String^> ALPHA2 = new ConcurrentHashMap^<^>(); echo: echo: echo /** echo * Static initialization. echo */ echo static echo { FOR /F "usebackq tokens=2,3 delims=," %%i IN (`findstr /R ",[A-Z][A-Z]$" %1`) DO ( set t=%%i if "!t!"=="!t: =!" ( echo ALPHA2.put("%%i".toUpperCase(Locale.getDefault(^)^), ""^); //$NON-NLS-1$ ) else ( echo ALPHA2.put("%%j".toUpperCase(Locale.getDefault(^)^), ""^); //$NON-NLS-1$ ) ) echo } echo: echo: echo /** echo * Private default constructor. echo */ echo private GeneratedISO3166A2() echo { ===================================================== == File: generatorCountries.sh ===================================================== #!/bin/bash # $0 Script # $1 Path to downloaded file # cd "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" echo "/*" echo " * Code generator Copyright (C) 2020 Dipl.-Inform. Kai Hofmann. All rights reserved!" echo " */" echo "package de.powerstat.validation.generated;" echo "" echo "" echo "import java.util.Map;" echo "import java.util.Locale;" echo "import java.util.concurrent.ConcurrentHashMap;" echo "" echo "" echo "/**" echo " * ISO 3166 Alpha 2." echo " */" echo "public final class GeneratedISO3166A2" echo " {" echo " /**" echo " * Alpha 2 codes map." echo " */" echo " private static final Map<String, String> ALPHA2 = new ConcurrentHashMap<>();" echo "" echo "" echo " /**" echo " * Static initialization." echo " */" echo " static" echo " {" for i in `grep -oE "[A-Z]{2}" $1`; do echo " ALPHA2.put(\"$i\".toUpperCase(Locale.getDefault()), \"\"); //\$NON-NLS-1\$" done echo " }" echo "" echo "" echo " /**" echo " * Private default constructor." echo " */" echo " private GeneratedISO3166A2()" echo " {" echo " super();" echo " }" echo "" echo "" echo " /**" echo " * Check if alpha2 code exists." echo " *" echo " * @param alpha2 Alpha 2 code to check" ===================================================== == File: generatorCurrencies.bat ===================================================== @echo off rem Generate Java class source from tld text file. rem rem $0 script rem $1 Path to downloaded file setlocal ENABLEDELAYEDEXPANSION pushd %~dp0 echo /* echo * Code generator Copyright (C) 2020-2021 Dipl.-Inform. Kai Hofmann. All rights reserved! echo */ echo package de.powerstat.validation.generated; echo: echo: echo import java.util.HashSet; echo import java.util.Set; echo import java.util.Locale; echo: echo: echo /** echo * ISO 4217. echo */ echo public final class GeneratedISO4217 echo { echo /** echo * ISO 4217 code list. echo */ echo private static final Set^<String^> CODES = new HashSet^<^>(); echo: echo: echo /** echo * Static initialization. echo */ echo static echo { FOR /F "usebackq tokens=3,4 delims=," %%i IN (`findstr /R ",[A-Z][A-Z][A-Z]," %1`) DO ( set t=%%i if "!t!"=="!t: =!" ( echo CODES.add("%%i".toLowerCase(Locale.getDefault(^)^)^); //$NON-NLS-1$ ) else ( echo CODES.add("%%j".toLowerCase(Locale.getDefault(^)^)^); //$NON-NLS-1$ ) ) echo } echo: echo: echo /** echo * Private default constructor. echo */ echo private GeneratedISO4217() echo { ===================================================== == File: generatorCurrencies.sh ===================================================== #!/bin/bash # $0 Script # $1 Path to downloaded file # cd "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" echo "/*" echo " * Code generator Copyright (C) 2020-2021 Dipl.-Inform. Kai Hofmann. All rights reserved!" echo " */" echo "package de.powerstat.validation.generated;" echo "" echo "" echo "import java.util.HashSet;" echo "import java.util.Set;" echo "import java.util.Locale;" echo "" echo "" echo "/**" echo " * ISO 4217." echo " */" echo "public final class GeneratedISO4217" echo " {" echo " /**" echo " * ISO 4217 code list." echo " */" echo " private static final Set<String> CODES = new HashSet<>();" echo "" echo "" echo " /**" echo " * Static initialization." echo " */" echo " static" echo " {" for i in `grep -oE ",[A-Z]{3}," $1 | grep -oE "[A-Z]{3}"`; do echo " CODES.add(\"$i\".toUpperCase(Locale.getDefault())); //\$NON-NLS-1\$" done echo " }" echo "" echo "" echo " /**" echo " * Private default constructor." echo " */" echo " private GeneratedISO4217()" echo " {" echo " super();" echo " }" echo "" echo "" echo " /**" echo " * Check if ISO 4217 code exists." echo " *" echo " * @param code Code to check" ===================================================== == File: generatorLanguages.bat ===================================================== @echo off rem Generate Java class source from tld text file. rem rem $0 script rem $1 Path to downloaded file setlocal ENABLEDELAYEDEXPANSION pushd %~dp0 echo /* echo * Code generator Copyright (C) 2020 Dipl.-Inform. Kai Hofmann. All rights reserved! echo */ echo package de.powerstat.validation.generated; echo: echo: echo import java.util.HashSet; echo import java.util.Set; echo import java.util.Locale; echo: echo: echo /** echo * ISO 6391. echo */ echo public final class GeneratedISO6391 echo { echo /** echo * ISO 6391 code list. echo */ echo private static final Set^<String^> CODES = new HashSet^<^>(); echo: echo: echo /** echo * Static initialization. echo */ echo static echo { FOR /F "usebackq tokens=1 delims=," %%i IN (`findstr /R "^[a-z][a-z]," %1`) DO ( echo CODES.add("%%i".toLowerCase(Locale.getDefault(^)^)^); //$NON-NLS-1$ ) echo } echo: echo: echo /** echo * Private default constructor. echo */ echo private GeneratedISO6391() echo { echo super(); echo } echo: echo: echo /** ===================================================== == File: generatorLanguages.sh ===================================================== #!/bin/bash # $0 Script # $1 Path to downloaded file # cd "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" echo "/*" echo " * Code generator Copyright (C) 2020 Dipl.-Inform. Kai Hofmann. All rights reserved!" echo " */" echo "package de.powerstat.validation.generated;" echo "" echo "" echo "import java.util.HashSet;" echo "import java.util.Set;" echo "import java.util.Locale;" echo "" echo "" echo "/**" echo " * ISO 6391." echo " */" echo "public final class GeneratedISO6391" echo " {" echo " /**" echo " * ISO 6391 code list." echo " */" echo " private static final Set<String> CODES = new HashSet<>();" echo "" echo "" echo " /**" echo " * Static initialization." echo " */" echo " static" echo " {" for i in `grep -oE "^[a-z]{2}" $1`; do echo " CODES.add(\"$i\".toUpperCase(Locale.getDefault())); //\$NON-NLS-1\$" done echo " }" echo "" echo "" echo " /**" echo " * Private default constructor." echo " */" echo " private GeneratedISO6391()" echo " {" echo " super();" echo " }" echo "" echo "" echo " /**" echo " * Check if ISO 6391 code exists." echo " *" echo " * @param code Code to check" ===================================================== == File: generatorPhoneAreaCodes.bat ===================================================== @echo off rem Generate Java class source from tld text file. rem rem $0 script rem $1 Path to downloaded file setlocal ENABLEDELAYEDEXPANSION pushd %~dp0 echo /* echo * Code generator Copyright (C) 2022 Dipl.-Inform. Kai Hofmann. All rights reserved! echo */ echo package de.powerstat.validation.generated; echo: echo: echo import java.util.Map; echo import java.util.Locale; echo import java.util.concurrent.ConcurrentHashMap; echo: echo: echo /** echo * International phone area codes. echo */ echo public final class GeneratedInternationalPhoneAreaCodes echo { echo /** echo * Phone area codes map. echo */ echo private static final Map^<String, String^> PHONEAREAS = new ConcurrentHashMap^<^>(); echo: echo: echo /** echo * Static initialization. echo */ echo static echo { FOR /F "usebackq tokens=2 delims=," %%i IN (`findstr /R "^[A-Z][A-Z][A-Z],[0-9-]*," %1`) DO ( set t=%%i if "!t!"=="!t: =!" ( echo PHONEAREAS.put("%%i".toUpperCase(Locale.getDefault(^)^), ""^); //$NON-NLS-1$ ) else ( echo PHONEAREAS.put("%%i".toUpperCase(Locale.getDefault(^)^), ""^); //$NON-NLS-1$ ) ) echo } echo: echo: echo /** echo * Private default constructor. echo */ echo private GeneratedInternationalPhoneAreaCodes() echo { ===================================================== == File: generatorPhoneAreaCodes.sh ===================================================== #!/bin/bash # $0 Script # $1 Path to downloaded file # cd "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" echo "/*" echo " * Code generator Copyright (C) 2022 Dipl.-Inform. Kai Hofmann. All rights reserved!" echo " */" echo "package de.powerstat.validation.generated;" echo "" echo "" echo "import java.util.Map;" echo "import java.util.Locale;" echo "import java.util.concurrent.ConcurrentHashMap;" echo "" echo "" echo "/**" echo " * International phone area codes." echo " */" echo "public final class GeneratedInternationalPhoneAreaCodes" echo " {" echo " /**" echo " * Phone area codes map." echo " */" echo " private static final Map<String, String> PHONEAREAS = new ConcurrentHashMap<>();" echo "" echo "" echo " /**" echo " * Static initialization." echo " */" echo " static" echo " {" for i in `grep -oE "^([A-Z]+),([0-9]+),([A-Z]+),([a-zA-Z]+),(Yes|No),([0-9]+),([0-9]+),([A-Z]+),([A-Z]+),([A-Z]{2})," $1`; do echo " PHONEAREAS.put(\"$i\".toUpperCase(Locale.getDefault()), \"\"); //\$NON-NLS-1\$" done echo " }" echo "" echo "" echo " /**" echo " * Private default constructor." echo " */" echo " private GeneratedInternationalPhoneAreaCodes()" echo " {" echo " super();" echo " }" echo "" echo "" echo " /**" echo " * Check if phone area code exists." echo " *" echo " * @param phoneArea Phone area code to check" ===================================================== == File: generatorTLD.bat ===================================================== @echo off rem Generate Java class source from tld text file. rem rem $0 script rem $1 Path to downloaded file setlocal ENABLEDELAYEDEXPANSION pushd %~dp0 echo /* echo * Code generator Copyright (C) 2020 Dipl.-Inform. Kai Hofmann. All rights reserved! echo */ echo package de.powerstat.validation.generated; echo: echo: echo import java.util.HashSet; echo import java.util.Set; echo import java.util.Locale; echo: echo: echo /** echo * Top level domains. echo */ echo public final class GeneratedTlds echo { echo /** echo * Top level domain list. echo */ echo private static final Set^<String^> TOP_LEVEL_DOMAINS = new HashSet^<^>(); echo: echo: echo /** echo * Static initialization. echo */ echo static echo { FOR /F "usebackq" %%i IN (`findstr /v # %1`) DO ( echo TOP_LEVEL_DOMAINS.add("%%i".toLowerCase(Locale.getDefault(^)^)^); //$NON-NLS-1$ ) echo } echo: echo: echo /** echo * Private default constructor. echo */ echo private GeneratedTlds() echo { echo super(); echo } echo: echo: echo /** ===================================================== == File: generatorTLD.sh ===================================================== #!/bin/bash # $0 Script # $1 Path to downloaded file # cd "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" echo "/*" echo " * Code generator Copyright (C) 2020 Dipl.-Inform. Kai Hofmann. All rights reserved!" echo " */" echo "package de.powerstat.validation.generated;" echo "" echo "" echo "import java.util.HashSet;" echo "import java.util.Set;" echo "import java.util.Locale;" echo "" echo "" echo "/**" echo " * Top level domains." echo " */" echo "public final class GeneratedTlds" echo " {" echo " /**" echo " * Top level domain list." echo " */" echo " private static final Set<String> TOP_LEVEL_DOMAINS = new HashSet<>();" echo "" echo "" echo " /**" echo " * Static initialization." echo " */" echo " static" echo " {" for i in `grep -E -v "^#" $1`; do echo " TOP_LEVEL_DOMAINS.add(\"$i\".toLowerCase(Locale.getDefault())); //\$NON-NLS-1\$" done echo " }" echo "" echo "" echo " /**" echo " * Private default constructor." echo " */" echo " private GeneratedTlds()" echo " {" echo " super();" echo " }" echo "" echo "" echo " /**" echo " * Check if top level domain exists." echo " *" echo " * @param tld Top level domain to check" ===================================================== == File: Jenkinsfile ===================================================== pipeline { agent any tools { maven 'Maven3' jdk 'JDK11' git 'GIT' } options { buildDiscarder(logRotator(numToKeepStr: '4')) skipStagesAfterUnstable() disableConcurrentBuilds() } triggers { // MINUTE HOUR DOM MONTH DOW pollSCM('H 6-18/4 * * 1-5') } environment { expectedRemoteUrl = "https://github.com/PowerStat/Validation.git" } stages { stage('Clean') { steps { script { if (isUnix()) { sh 'mvn --batch-mode clean' } else { bat 'mvn --batch-mode clean' } ===================================================== == File: PMD.xml ===================================================== <?xml version="1.0" encoding="UTF-8"?> <ruleset name="PowerStat Rules" xmlns="http://pmd.sourceforge.net/ruleset/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 https://pmd.sourceforge.io/ruleset_2_0_0.xsd"> <description>This ruleset checks the code for discouraged programming constructs.</description> <!-- Apex Rules --> <!-- not used --> <!-- Ecmascript Rules --> <!-- Ecmascript best practices --> <rule ref="category/ecmascript/bestpractices.xml/AvoidWithStatement" /> <rule ref="category/ecmascript/bestpractices.xml/ConsistentReturn" /> <rule ref="category/ecmascript/bestpractices.xml/GlobalVariable" /> <rule ref="category/ecmascript/bestpractices.xml/ScopeForInVariable" /> <rule ref="category/ecmascript/bestpractices.xml/UseBaseWithParseInt" /> <!-- Ecmascript code style --> <rule ref="category/ecmascript/codestyle.xml/AssignmentInOperand"> <properties> <property name="allowIf" value="false" /> <property name="allowFor" value="false" /> <property name="allowWhile" value="false" /> <property name="allowTernary" value="false" /> <property name="allowTernaryResults" value="false" /> <property name="allowIncrementDecrement" value="false" /> </properties> </rule> <rule ref="category/ecmascript/codestyle.xml/ForLoopsMustUseBraces" /> <rule ref="category/ecmascript/codestyle.xml/IfElseStmtsMustUseBraces" /> <rule ref="category/ecmascript/codestyle.xml/IfStmtsMustUseBraces" /> <rule ref="category/ecmascript/codestyle.xml/NoElseReturn" /> <rule ref="category/ecmascript/codestyle.xml/UnnecessaryBlock" /> <rule ref="category/ecmascript/codestyle.xml/UnnecessaryParentheses" /> <rule ref="category/ecmascript/codestyle.xml/UnreachableCode" /> <rule ref="category/ecmascript/codestyle.xml/WhileLoopsMustUseBraces" /> <!-- Ecmascript error prone --> <rule ref="category/ecmascript/errorprone.xml/AvoidTrailingComma"> <properties> <property name="allowObjectLiteral" value="false" /> <property name="allowArrayLiteral" value="false" /> </properties> </rule> <rule ref="category/ecmascript/errorprone.xml/EqualComparison" /> <rule ref="category/ecmascript/errorprone.xml/InnaccurateNumericLiteral" /> <!-- HTML Rules --> <!-- HTML best practices --> <!-- <rule ref="category/html/bestpractices.xml/AvoidInlineStyles" /> requires 6.45 --> <!-- <rule ref="category/html/bestpractices.xml/UnnecessaryTypeAttribute" /> requires 6.45 --> <!-- <rule ref="category/html/bestpractices.xml/UseAltAttributeForImages" /> requires 6.45 --> ===================================================== == File: pom.xml ===================================================== <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>de.powerstat.toolbaseline</groupId> <artifactId>tbl-java-parent</artifactId> <version>17.2.0</version> </parent> <groupId>de.powerstat.validation</groupId> <artifactId>validation</artifactId> <version>3.1.0</version> <packaging>jar</packaging> <name>PowerStatsValidationUtilities</name> <description>PowerStats validation utilities.</description> <url>https://www.powerstat.de/ValidationUtils.html</url> <properties> <license.inceptionYear>2018</license.inceptionYear> <sonarTypeServer>ossrh</sonarTypeServer> <sonarTypeHost>oss.sonatype.org</sonarTypeHost> <sonar.host.url>http://localhost:9000</sonar.host.url> </properties> <profiles> <profile> <id>Windows</id> <activation> <os> <family>Windows</family> </os> </activation> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <phase>generate-sources</phase> <configuration> <target> <mkdir dir="${project.build.directory}\generated-sources\main\java\de\powerstat\validation\generated" /> ===================================================== == File: README.md ===================================================== # PowerStat's validation value objects/entities These validation value objects and entities should be useful classes. ## Installation Because this library is only useful for developers the installation depends on your build environment. For example when using Apache Maven you could add the following dependency to your project: <dependency> <groupId>de.powerstat</groupId> <artifactId>validation</artifactId> <version>3.1.0</version> </dependency> Also please copy the `checkstyle-config.xml` and `PMD.xml` into your project. Please add the following entry to your maven `settings.xml`: <server> <id>nvd</id> <password>nvd api-key</password> </server> The API-Key could be requested here: [National Vulnerability Database](https://nvd.nist.gov/developers/request-an-api-key) Other build tools like gradle will work analogous. Java platform module system: module com.example.java.app { requires de.powerstat.validation; requires de.powerstat.validation.comparators; requires de.powerstat.validation.containers; requires de.powerstat.validation.entities; requires de.powerstat.validation.interfaces; requires de.powerstat.validation.values; requires de.powerstat.validation.values.strategies; } To compile this project yourself you could use: mvn clean install org.pitest:pitest-maven:mutationCoverage site or simply: mvn clean install ===================================================== == File: src/main/java/de/powerstat/validation/comparators/ComparatorEMailByDomain.java ===================================================== /* * Copyright (C) 2022 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.comparators; import java.io.Serializable; import java.util.Comparator; import java.util.Objects; import de.powerstat.validation.values.EMail; /** * Comparator for EMail values by reverse domain and local part. */ public class ComparatorEMailByDomain implements Comparator<EMail>, Serializable { /** * Serial version unique identifier. */ private static final long serialVersionUID = 1L; /** * Default constructor. */ public ComparatorEMailByDomain() { super(); } /** * Compare two EMail value objects. * * @param email1 Email 1 * @param email2 Email 2 * @return 0: equal; 1: greater; -1: smaller * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ @Override public int compare(final EMail email1, final EMail email2) { Objects.requireNonNull(email1, "email1"); //$NON-NLS-1$ Objects.requireNonNull(email2, "email2"); //$NON-NLS-1$ int result = email1.getReverseDomainPart().compareTo(email2.getReverseDomainPart()); if (result == 0) { result = email1.getLocalPart().compareTo(email2.getLocalPart()); ===================================================== == File: src/main/java/de/powerstat/validation/comparators/package-info.java ===================================================== /* * Copyright (C) 2019-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ /** * Validation value class comparators. */ package de.powerstat.validation.comparators; ===================================================== == File: src/main/java/de/powerstat/validation/containers/GroupOf.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.containers; import java.util.Collection; import java.util.Iterator; import java.util.NoSuchElementException; import java.util.Objects; import java.util.Set; import java.util.SortedSet; import java.util.concurrent.ConcurrentSkipListSet; import java.util.regex.Pattern; /** * Group of a specific type. * * @param <T> Use only entities */ public class GroupOf<T> implements Set<T> { /** * Group name regexp. */ private static final Pattern GROUPNAME_REGEXP = Pattern.compile("^[\\p{L}][\\p{L}-]*$"); //$NON-NLS-1$ /** * Group name. */ private final String name; /** * Group. */ private final SortedSet<T> group = new ConcurrentSkipListSet<>(); /** * Constructor. * * @param groupName Group name (maximum 40 characters) */ public GroupOf(final String groupName) { super(); Objects.requireNonNull(groupName, "groupName"); //$NON-NLS-1$ if ((groupName.length() < 1) || (groupName.length() > 40)) { ===================================================== == File: src/main/java/de/powerstat/validation/containers/HistoryOf.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.containers; import java.time.OffsetDateTime; import java.time.format.DateTimeFormatter; import java.util.Map; import java.util.NoSuchElementException; import java.util.Objects; import java.util.Set; import java.util.SortedMap; import java.util.concurrent.ConcurrentSkipListMap; /** * History of a specific type. * * @param <T> Use only value objects * * TODO Change Datetime to an earlier Datetime */ public class HistoryOf<T> { /** * History. */ private final SortedMap<OffsetDateTime, T> history = new ConcurrentSkipListMap<>(); /** * Constructor. */ public HistoryOf() { super(); } /** * Calculate hash code. * * @return Hash * @see java.lang.Object#hashCode() */ @Override public int hashCode() { if (this.history.isEmpty()) ===================================================== == File: src/main/java/de/powerstat/validation/containers/NTuple15.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.containers; import java.util.Objects; /** * N-Tuple 15. * * @param <T1> Type 1 * @param <T2> Type 2 optional * @param <T3> Type 3 optional * @param <T4> Type 4 optional * @param <T5> Type 5 optional * @param <T6> Type 6 optional * @param <T7> Type 7 optional * @param <T8> Type 8 optional * @param <T9> Type 9 optional * @param <T10> Type 10 optional * @param <T11> Type 11 optional * @param <T12> Type 12 optional * @param <T13> Type 13 optional * @param <T14> Type 14 optional * @param <T15> Type 15 optional */ // @SuppressFBWarnings("CC_CYCLOMATIC_COMPLEXITY") @SuppressWarnings({"checkstyle:ClassTypeParameterName", "checkstyle:MethodTypeParameterName", "checkstyle:NoWhitespaceBefore", "checkstyle:SeparatorWrap", "PMD.GenericsNaming", "PMD.CommentSize", "java:S3776", "java:S1541"}) public final class NTuple15<T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>, T4 extends Comparable<T4>, T5 extends Comparable<T5>, T6 extends Comparable<T6>, T7 extends Comparable<T7>, T8 extends Comparable<T8>, T9 extends Comparable<T9>, T10 extends Comparable<T10>, T11 extends Comparable<T11>, T12 extends Comparable<T12>, T13 extends Comparable<T13>, T14 extends Comparable<T14>, T15 extends Comparable<T15>> implements Comparable<NTuple15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>> { /* * * Cache for singletons. */ // private static final Map<?, NTuple15<T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>, T4 extends Comparable<T4>, T5 extends Comparable<T5>, T6 extends Comparable<T6>, T7 extends Comparable<T7>, T8 extends Comparable<T8>, T9 extends Comparable<T9>, T10 extends Comparable<T10>, T11 extends Comparable<T11>, T12 extends Comparable<T12>, T13 extends Comparable<T13>, T14 extends Comparable<T14>, T15 extends Comparable<T15>>> CACHE = new ConcurrentHashMap<>(); /** * Object1 of type T1. */ private final T1 object1; /** * Object2 of type T2. */ private final T2 object2; /** * Object3 of type T3. */ ===================================================== == File: src/main/java/de/powerstat/validation/containers/NTuple16.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.containers; import java.util.Objects; /** * N-Tuple 16. * * @param <T1> Type 1 * @param <T2> Type 2 optional * @param <T3> Type 3 optional * @param <T4> Type 4 optional * @param <T5> Type 5 optional * @param <T6> Type 6 optional * @param <T7> Type 7 optional * @param <T8> Type 8 optional * @param <T9> Type 9 optional * @param <T10> Type 10 optional * @param <T11> Type 11 optional * @param <T12> Type 12 optional * @param <T13> Type 13 optional * @param <T14> Type 14 optional * @param <T15> Type 15 optional * @param <T16> Type 16 */ // @SuppressFBWarnings("CC_CYCLOMATIC_COMPLEXITY") @SuppressWarnings({"checkstyle:ClassTypeParameterName", "checkstyle:MethodTypeParameterName", "checkstyle:NoWhitespaceBefore", "checkstyle:SeparatorWrap", "PMD.GenericsNaming", "PMD.CommentSize", "PMD.TooManyFields", "java:S3776", "java:S1541"}) public final class NTuple16<T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>, T4 extends Comparable<T4>, T5 extends Comparable<T5>, T6 extends Comparable<T6>, T7 extends Comparable<T7>, T8 extends Comparable<T8>, T9 extends Comparable<T9>, T10 extends Comparable<T10>, T11 extends Comparable<T11>, T12 extends Comparable<T12>, T13 extends Comparable<T13>, T14 extends Comparable<T14>, T15 extends Comparable<T15>, T16 extends Comparable<T16>> implements Comparable<NTuple16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>> { /* * * Cache for singletons. */ // private static final Map<?, NTuple15<T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>, T4 extends Comparable<T4>, T5 extends Comparable<T5>, T6 extends Comparable<T6>, T7 extends Comparable<T7>, T8 extends Comparable<T8>, T9 extends Comparable<T9>, T10 extends Comparable<T10>, T11 extends Comparable<T11>, T12 extends Comparable<T12>, T13 extends Comparable<T13>, T14 extends Comparable<T14>, T15 extends Comparable<T15>, T16 extends Comparable<T16>>> CACHE = new ConcurrentHashMap<>(); /** * Object1 of type T1. */ private final T1 object1; /** * Object2 of type T2. */ private final T2 object2; /** * Object3 of type T3. ===================================================== == File: src/main/java/de/powerstat/validation/containers/NTuple2.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.containers; import java.util.Objects; /** * N-Tuple 2. * * @param <T1> Type 1 * @param <T2> Type 2 */ @SuppressWarnings({"checkstyle:ClassTypeParameterName", "checkstyle:MethodTypeParameterName", "PMD.GenericsNaming"}) public final class NTuple2<T1 extends Comparable<T1>, T2 extends Comparable<T2>> implements Comparable<NTuple2<T1, T2>> { /* * * Cache for singletons. */ // private static final Map<?, NTuple2<T1 extends Comparable<T1>, T2 extends Comparable<T2>>> CACHE = new ConcurrentHashMap<>(); /** * Object1 of type T1. */ private final T1 object1; /** * Object2 of type T2. */ private final T2 object2; /** * Private constructor. * * @param obj1 Object 1 of type T1 * @param obj2 Object 2 of Type T2 */ private NTuple2(final T1 obj1, final T2 obj2) { super(); Objects.requireNonNull(obj1, "obj1 is null"); //$NON-NLS-1$ Objects.requireNonNull(obj2, "obj2 is null"); //$NON-NLS-1$ this.object1 = obj1; this.object2 = obj2; } ===================================================== == File: src/main/java/de/powerstat/validation/containers/NTuple3.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.containers; import java.util.Objects; /** * N-Tuple 3. * * @param <T1> Type 1 * @param <T2> Type 2 * @param <T3> Type 3 */ @SuppressWarnings({"checkstyle:ClassTypeParameterName", "checkstyle:MethodTypeParameterName", "PMD.GenericsNaming"}) public final class NTuple3<T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>> implements Comparable<NTuple3<T1, T2, T3>> { /* * * Cache for singletons. */ // private static final Map<?, NTuple3<T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>>> CACHE = new ConcurrentHashMap<>(); /** * Object1 of type T1. */ private final T1 object1; /** * Object2 of type T2. */ private final T2 object2; /** * Object3 of type T3. */ private final T3 object3; /** * Private constructor. * * @param obj1 Object 1 of type T1 * @param obj2 Object 2 of Type T2 * @param obj3 Object 3 of Type T3 */ private NTuple3(final T1 obj1, final T2 obj2, final T3 obj3) { super(); ===================================================== == File: src/main/java/de/powerstat/validation/containers/NTuple4.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.containers; import java.util.Objects; /** * N-Tuple 4. * * @param <T1> Type 1 * @param <T2> Type 2 * @param <T3> Type 3 * @param <T4> Type 4 */ @SuppressWarnings({"checkstyle:ClassTypeParameterName", "checkstyle:MethodTypeParameterName", "checkstyle:NoWhitespaceBefore", "checkstyle:SeparatorWrap", "PMD.GenericsNaming"}) public final class NTuple4<T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>, T4 extends Comparable<T4>> implements Comparable<NTuple4<T1, T2, T3, T4>> { /* * * Cache for singletons. */ // private static final Map<?, NTuple4<T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>, T4 extends Comparable<T4>>> CACHE = new ConcurrentHashMap<>(); /** * Object1 of type T1. */ private final T1 object1; /** * Object2 of type T2. */ private final T2 object2; /** * Object3 of type T3. */ private final T3 object3; /** * Object4 of type T4. */ private final T4 object4; /** * Private constructor. * * @param obj1 Object 1 of type T1 ===================================================== == File: src/main/java/de/powerstat/validation/containers/NTuple9.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.containers; import java.util.Objects; /** * N-Tuple 9. * * @param <T1> Type 1 * @param <T2> Type 2 * @param <T3> Type 3 * @param <T4> Type 4 * @param <T5> Type 5 * @param <T6> Type 6 * @param <T7> Type 7 * @param <T8> Type 8 * @param <T9> Type 9 */ @SuppressWarnings({"checkstyle:ClassTypeParameterName", "checkstyle:MethodTypeParameterName", "checkstyle:NoWhitespaceBefore", "checkstyle:SeparatorWrap", "PMD.GenericsNaming"}) public final class NTuple9<T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>, T4 extends Comparable<T4>, T5 extends Comparable<T5>, T6 extends Comparable<T6>, T7 extends Comparable<T7>, T8 extends Comparable<T8>, T9 extends Comparable<T9>> implements Comparable<NTuple9<T1, T2, T3, T4, T5, T6, T7, T8, T9>> { /* * * Cache for singletons. */ // private static final Map<?, NTuple3<T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>>> CACHE = new ConcurrentHashMap<>(); /** * Object1 of type T1. */ private final T1 object1; /** * Object2 of type T2. */ private final T2 object2; /** * Object3 of type T3. */ private final T3 object3; /** * Object4 of type T4. */ private final T4 object4; ===================================================== == File: src/main/java/de/powerstat/validation/containers/package-info.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ /** * Validation value container classes. */ package de.powerstat.validation.containers; ===================================================== == File: src/main/java/de/powerstat/validation/entities/package-info.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ /** * Validation entity classes. */ package de.powerstat.validation.entities; ===================================================== == File: src/main/java/de/powerstat/validation/entities/Person.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.entities; import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.List; import java.util.NoSuchElementException; import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import de.powerstat.validation.containers.HistoryOf; import de.powerstat.validation.interfaces.IEntity; import de.powerstat.validation.values.BloodGroup; import de.powerstat.validation.values.Firstname; import de.powerstat.validation.values.Gender; import de.powerstat.validation.values.Lastname; import de.powerstat.validation.values.UUID; /** * Person. * * DSGVO relevant. * * TODO birth place (optional) * TODO death place (optional) * TODO history of citizenships * TODO Identity card number at different times * TODO eye color * TODO Skin color * TODO body height at different times (24cm - 272cm) * TODO body weight at different times (212g - 635kg) * TODO body temperature at different times * TODO characteristics * TODO Zahnstatus at differet times * TODO DNA * TODO faceid, fingerid, eyeid at different times * TODO Signature(s) * TODO Namenszusätze: Adelstitel, Academic title since, Work titles/qualifications since * TODO ... Nicknames at different times * * TODO Address(es) at different times * TODO Communication typ(s) at different times ===================================================== == File: src/main/java/de/powerstat/validation/interfaces/IAggregateRoot.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.interfaces; /** * Aggregate root marker interface. */ public interface IAggregateRoot { } ===================================================== == File: src/main/java/de/powerstat/validation/interfaces/IDomainEvent.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.interfaces; /** * Domain event marker interface. */ public interface IDomainEvent { } ===================================================== == File: src/main/java/de/powerstat/validation/interfaces/IEntity.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.interfaces; /** * Entity marker interface. */ public interface IEntity { // <T> of(String value) /** * String value. * * @return Value as string */ String stringValue(); } ===================================================== == File: src/main/java/de/powerstat/validation/interfaces/IService.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.interfaces; /** * Service marker interface. */ public interface IService { } ===================================================== == File: src/main/java/de/powerstat/validation/interfaces/IValueObject.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.interfaces; /** * Value object marker interface. */ public interface IValueObject { // <T> of(String value) /** * String value. * * @return Value as string */ String stringValue(); } ===================================================== == File: src/main/java/de/powerstat/validation/interfaces/package-info.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ /** * Validation interfaces. */ package de.powerstat.validation.interfaces; ===================================================== == File: src/main/java/de/powerstat/validation/package-info.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ /** * Validation utilities. */ package de.powerstat.validation; ===================================================== == File: src/main/java/de/powerstat/validation/ValidationUtils.java ===================================================== /* * Copyright (C) 2018-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation; import java.util.ArrayList; import java.util.List; import java.util.Objects; /** * General validation utilities. * * @author Kai Hofmann */ // @SuppressFBWarnings({"CLI_CONSTANT_LIST_INDEX", "DCN_NULLPOINTER_EXCEPTION", "EXS_EXCEPTION_SOFTENING_RETURN_FALSE"}) @SuppressWarnings("java:S1696") public final class ValidationUtils { /* * * Logger. */ // private static final Logger LOGGER = LogManager.getLogger(ValidationUtils.class); /** * URI separator. */ private static final char URI_SEPARATOR = '/'; /** * Private default constructor. */ private ValidationUtils() { super(); } /** * Sanitize url path. * * @param urlPath URL path * @return Sanitized url path * @throws NullPointerException when urlPath is null */ public static String sanitizeUrlPath(final String urlPath) { Objects.requireNonNull(urlPath, "urlPath"); //$NON-NLS-1$ ===================================================== == File: src/main/java/de/powerstat/validation/values/Address.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Arrays; import java.util.Formatter; import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * Address. * * DSGVO relevant. * * TODO COUNTRYNAME - English country names * TODO vcard, hcard, ldap, vcard+xml -> Data mappings/converter * TODO Get/cache GPS posiion for address */ // @SuppressFBWarnings{("CC_CYCLOMATIC_COMPLEXITY", "PMB_POSSIBLE_MEMORY_BLOAT"}) @SuppressWarnings({"java:S923", "java:S3776", "PMD.ExcessiveClassLength"}) public class Address implements Comparable<Address>, IValueObject { /* * * Cache for singletons. */ // private static final Map<NTuple15<Country, PostalCode, City, Province, District, Street, BuildingNr, BuildingName, SubBuilding, PoBoxNumber, Department, Neighbourhood, Block, BFPONumber, Lines>, Address> CACHE = new WeakHashMap<>(); /** * Address formats for countries. */ private static final Map<String, String> ADDRESS_FORMATS = new ConcurrentHashMap<>(); /** * Address format 1. */ private static final String FORMAT1 = "%2$s%n%16$s%n%4$s%n%3$s%n%1$s%n"; //$NON-NLS-1$ /** * Address format 2. */ private static final String FORMAT2 = "%2$s%n%10$s%n%9$s%n%8$s %7$s%n%6$s%nBP %11$s%n%3$s %4$s%n%1$s%n"; //$NON-NLS-1$ ===================================================== == File: src/main/java/de/powerstat/validation/values/AddressWithWGS84Position.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Arrays; import java.util.Objects; /** * Address with wgs84 position. * * DSGVO relevant. * * TODO compareTo(): AddressWithWGS84Position */ public final class AddressWithWGS84Position extends Address { /* * * Cache for singletons. */ // private static final Map<NTuple16<Country, PostalCode, City, Province, District, Street, BuildingNr, BuildingName, SubBuilding, PoBoxNumber, Department, Neighbourhood, Block, BFPONumber, Lines, WGS84Position>, AddressWithWGS84Position> CACHE = new WeakHashMap<>(); /** * WGS84 position. */ private final WGS84Position position; /** * Constructor. * * @param country Country * @param postalCode Postal code * @param city City * @param province Province * @param district District * @param street Street * @param buildingNr Bulding number * @param buildingName Building name * @param subBuilding Sub building * @param poBoxNumber Post office box number * @param department Department * @param neighbourhood Neighbourhood * @param block Block * @param bFPONumber British Forces Post Office Number * @param lines Lines 1-5 * @param position WGS84Position */ ===================================================== == File: src/main/java/de/powerstat/validation/values/BFPONumber.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Address BFPONumber. * * Not DSGVO relevant. */ public final class BFPONumber implements Comparable<BFPONumber>, IValueObject { /* * * Cache for singletons. */ // private static final Map<Integer, BFPONumber> CACHE = new WeakHashMap<>(); /** * BFPONumber. */ private final int bFPONumber; /** * Constructor. * * @param bFPONumber BFPONumber * @throws IndexOutOfBoundsException When the bFPONumber is out of bounds */ private BFPONumber(final int bFPONumber) { super(); if ((bFPONumber < 1) || (bFPONumber > 2035)) { throw new IndexOutOfBoundsException("BFPONumber illegal value!!"); //$NON-NLS-1$ } this.bFPONumber = bFPONumber; } /** * BFPONumber factory. * * @param bFPONumber BFPONumber ===================================================== == File: src/main/java/de/powerstat/validation/values/BIC.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * Business Identifier Code (BIC) ISO 9362. * * Not DSGVO relevant. */ public final class BIC implements Comparable<BIC>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, BIC> CACHE = new WeakHashMap<>(); /** * BIC regexp. */ @SuppressWarnings("java:S5867") private static final Pattern BIC_REGEXP = Pattern.compile("^[A-Z0-9]{4}[A-Z]{2}[A-Z2-9][0-9A-NP-Z](XXX|[0-9A-WY-Z][0-9A-Z]{2})?$"); //$NON-NLS-1$ /** * BIC. */ private final String bic; /** * Constructor. * * @param bic BIC * @throws NullPointerException if bic is null * @throws IllegalArgumentException if bic is not a correct bic */ private BIC(final String bic) { super(); Objects.requireNonNull(bic, "bic"); //$NON-NLS-1$ if ((bic.length() != 8) && (bic.length() != 11)) { throw new IllegalArgumentException("BIC with wrong length"); //$NON-NLS-1$ ===================================================== == File: src/main/java/de/powerstat/validation/values/Block.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * Address Block. * * Not DSGVO relevant. */ public final class Block implements Comparable<Block>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, Block> CACHE = new WeakHashMap<>(); /** * Block regexp. */ private static final Pattern BLOCK_REGEXP = Pattern.compile("^[\\p{L}\\p{Digit}]*$"); //$NON-NLS-1$ /** * Block. */ private final String block; /** * Constructor. * * @param block Block * @throws NullPointerException if block is null * @throws IllegalArgumentException if block is not a correct Block */ private Block(final String block) { super(); Objects.requireNonNull(block, "block"); //$NON-NLS-1$ if ((block.length() < 1) || (block.length() > 16)) { throw new IllegalArgumentException("Block with wrong length"); //$NON-NLS-1$ } ===================================================== == File: src/main/java/de/powerstat/validation/values/BloodGroup.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import de.powerstat.validation.interfaces.IValueObject; /** * Blood group AB0 rhesus system. * * @see <a href="https://de.wikipedia.org/wiki/Blutgruppe">Blutgruppe</a> * * Not DSGVO relevant. */ public enum BloodGroup implements IValueObject { /** * 0-. */ ON(0), /** * 0+. */ OP(1), /** * A-. */ AN(2), /** * A+. */ AP(3), /** * B-. */ BN(4), /** * B+. ===================================================== == File: src/main/java/de/powerstat/validation/values/BuildingName.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * Address Building name. * * Not DSGVO relevant. */ public final class BuildingName implements Comparable<BuildingName>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, BuildingName> CACHE = new WeakHashMap<>(); /** * Building name regexp. */ private static final Pattern BUILDNINGNAME_REGEXP = Pattern.compile("^[\\p{L}][\\p{L} -]*$"); /** * Building name. */ private final String buildingName; /** * Constructor. * * @param buildingName Building name * @throws NullPointerException if buildingName is null * @throws IllegalArgumentException if buildingName is not a correct building name */ private BuildingName(final String buildingName) { super(); Objects.requireNonNull(buildingName, "buildingName"); //$NON-NLS-1$ if ((buildingName.length() < 1) || (buildingName.length() > 32)) { throw new IllegalArgumentException("Building name with wrong length"); //$NON-NLS-1$ } ===================================================== == File: src/main/java/de/powerstat/validation/values/BuildingNr.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * Address Building number. * * Possibly DSGVO relevant. * * TODO optimize constructor/compareTo */ public final class BuildingNr implements Comparable<BuildingNr>, IValueObject { /* * * Logger. */ // private static final Logger LOGGER = LogManager.getLogger(BuildingNr.class); /* * * Cache for singletons. */ // private static final Map<String, BuildingNr> CACHE = new WeakHashMap<>(); /** * Building nr regexp. */ private static final Pattern BUILDINGNR_REGEXP = Pattern.compile("^(\\d{1,5})(([-/])(\\d{1,5}))?( (\\d{1,3})/(\\d{1,3}))?( ([a-z]))?$"); //$NON-NLS-1$ /** * Maximum known building nr in the world. */ private static final int MAX_KNOWN_BUILDING_NR = 29999; /** * Building number. */ private final String buildingNr; /** * Constructor. * ===================================================== == File: src/main/java/de/powerstat/validation/values/CalendarSystems.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import de.powerstat.validation.interfaces.IValueObject; /** * Supported calendar systems. * * Not DSGVO relevant. */ public enum CalendarSystems implements IValueObject { /** * Julian calendar system. */ JULIAN(0), /** * Gregorian calendar system. */ GREGORIAN(1); // ISLAMIC(2) // JEWISH(3) // INDIAN(4) // CHINESE(5) /** * Action number. */ private final int action; /** * Ordinal constructor. * * @param action Action number */ CalendarSystems(final int action) { this.action = action; } /** ===================================================== == File: src/main/java/de/powerstat/validation/values/City.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * Address City. * * Not DSGVO relevant. */ public final class City implements Comparable<City>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, City> CACHE = new WeakHashMap<>(); /** * City name regexp. */ private static final Pattern CITY_REGEXP = Pattern.compile("^[\\p{L}][\\p{L} -]*$"); //$NON-NLS-1$ /** * City. */ private final String city; /** * Constructor. * * @param city City name * @throws NullPointerException if city is null * @throws IllegalArgumentException if city is not a correct City name */ private City(final String city) { super(); Objects.requireNonNull(city, "city"); //$NON-NLS-1$ if ((city.length() < 1) || (city.length() > 85)) { throw new IllegalArgumentException("City with wrong length"); //$NON-NLS-1$ } ===================================================== == File: src/main/java/de/powerstat/validation/values/Country.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.generated.GeneratedISO3166A2; import de.powerstat.validation.interfaces.IValueObject; /** * Country - ISO 3166-1 codes. * * Not DSGVO relevant. * * TODO Translations */ public final class Country implements Comparable<Country>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, Country> CACHE = new WeakHashMap<>(); /** * Country regexp. */ @SuppressWarnings("java:S5867") private static final Pattern COUNTRY_REGEXP = Pattern.compile("^[A-Z]{2}$"); //$NON-NLS-1$ /** * Alpha-2 country code. */ private final String alpha2; /** * Constructor. * * @param alpha2 Alpha-2 code * @throws NullPointerException if code is null * @throws IllegalArgumentException if code is not a known alpha-2 code */ private Country(final String alpha2) { super(); Objects.requireNonNull(alpha2, "alpha2"); //$NON-NLS-1$ ===================================================== == File: src/main/java/de/powerstat/validation/values/Currency.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.generated.GeneratedISO4217; import de.powerstat.validation.interfaces.IValueObject; /** * Currency ISO 4217 codes. * * Not DSGVO relevant. * * TODO Translations */ public final class Currency implements Comparable<Currency>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, Currency> CACHE = new WeakHashMap<>(); /** * Currency regexp. */ @SuppressWarnings("java:S5867") private static final Pattern CURRENCY_REGEXP = Pattern.compile("^[A-Z]{3}$"); //$NON-NLS-1$ /** * ISO 4217 currency code. */ private final String code; /** * Constructor. * * @param code ISO 4217 code * @throws NullPointerException if code is null * @throws IllegalArgumentException if code is not a known 4217 code */ private Currency(final String code) { super(); Objects.requireNonNull(code, "code"); //$NON-NLS-1$ ===================================================== == File: src/main/java/de/powerstat/validation/values/Day.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Day. * * Not DSGVO relevant. * * TODO Constructor with day, month * TODO Constructor with day, month, year * TODO Listener * TODO hoursWithin = 24 * TODO min, max */ public final class Day implements Comparable<Day>, IValueObject { /** * Overflow constant. */ private static final String OVERFLOW = "Overflow"; //$NON-NLS-1$ /** * Underflow constant. */ private static final String UNDERFLOW = "Underflow"; //$NON-NLS-1$ /* * * Cache for singletons. */ // private static final Map<Integer, Day> CACHE = new WeakHashMap<>(); /** * Day. */ private final int day; /** * Constructor. * * @param day Day 1-31 * @throws IndexOutOfBoundsException When the day is less than 1 or greater than 31 ===================================================== == File: src/main/java/de/powerstat/validation/values/Days.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Days. * * Not DSGVO relevant. * * TODO min, max */ public final class Days implements Comparable<Days>, IValueObject { /* * * Cache for singletons. */ // private static final Map<Long, Days> CACHE = new WeakHashMap<>(); /** * Days. */ private final long days; /** * Constructor. * * @param days Days 0-.. * @throws IndexOutOfBoundsException When the day is less than 0 */ private Days(final long days) { super(); if (days < 0) { throw new IndexOutOfBoundsException("Negative days are not allowed"); //$NON-NLS-1$ } this.days = days; } /** * Days factory. ===================================================== == File: src/main/java/de/powerstat/validation/values/Department.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * Address Department. * * Not DSGVO relevant. */ public final class Department implements Comparable<Department>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, Department> CACHE = new WeakHashMap<>(); /** * Department regexp. */ private static final Pattern DEPARTMENT_REGEXP = Pattern.compile("^[\\p{L}][\\p{L}\\\\p{Digi}.& -]*$"); //$NON-NLS-1$ /** * Department. */ private final String department; /** * Constructor. * * @param department Department name * @throws NullPointerException if department is null * @throws IllegalArgumentException if department is not a correct department name */ private Department(final String department) { super(); Objects.requireNonNull(department, "department"); //$NON-NLS-1$ if ((department.length() < 1) || (department.length() > 64)) { throw new IllegalArgumentException("Department with wrong length"); //$NON-NLS-1$ } ===================================================== == File: src/main/java/de/powerstat/validation/values/DisplayAspectRatio.java ===================================================== /* * Copyright (C) 2021-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Display aspect ratio. * * 1:1 2.1:1 3:1 3:2 4:3 5:3 5:4 8:5 9:5 10:6 15:9 16:9 16:10 17:10 25:12 25:16 60:29 64:35 72:35 */ public final class DisplayAspectRatio implements Comparable<DisplayAspectRatio>, IValueObject { /* * * Cache for singletons. */ // private static final Map<NTuple2<Integer, Integer>, DisplayAspectRatio> CACHE = new WeakHashMap<>(); /** * Display x size (1-72). */ private final int x; /** * Display y size (1-35). */ private final int y; /** * Constructor. * * @param x Display x site (1-72) * @param y Display y size (1-35) */ private DisplayAspectRatio(final int x, final int y) { super(); if ((x <= 0) || (x > 72)) { throw new IndexOutOfBoundsException("x out of range (1-72)"); //$NON-NLS-1$ } if ((y <= 0) || (y > 35)) { throw new IndexOutOfBoundsException("y out of range (1-35)"); //$NON-NLS-1$ ===================================================== == File: src/main/java/de/powerstat/validation/values/District.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * Address District. * * Not DSGVO relevant. */ public final class District implements Comparable<District>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, District> CACHE = new WeakHashMap<>(); /** * District egexp. */ private static final Pattern DISTRICT_REGEXP = Pattern.compile("^[\\p{L}\\p{Digit}][\\p{L}\\p{Digit} -]*$"); //$NON-NLS-1$ /** * District. */ private final String district; /** * Constructor. * * @param district District name * @throws NullPointerException if district is null * @throws IllegalArgumentException if district is not a correct district name */ private District(final String district) { super(); Objects.requireNonNull(district, "district"); //$NON-NLS-1$ if ((district.length() < 1) || (district.length() > 18)) { throw new IllegalArgumentException("District with wrong length"); //$NON-NLS-1$ } ===================================================== == File: src/main/java/de/powerstat/validation/values/EMail.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Locale; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * Electronic mail. * * Probably DSGVO relevant. * * TODO Hostname exists? * TODO email exists check */ public final class EMail implements Comparable<EMail>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, EMail> CACHE = new WeakHashMap<>(); /** * Local part regexp. */ private static final Pattern LOCAL_REGEXP = Pattern.compile("^[A-Za-z0-9.!#$%&'*+/=?^_`{|}~-]+$"); //$NON-NLS-1$ /** * EMail. */ private final String email; /** * EMails domain part. */ private final Hostname domainPart; /** * EMails local part. */ private final String localPart; /** ===================================================== == File: src/main/java/de/powerstat/validation/values/Firstname.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * Firstname. * * DSGVO relevant. * * @see <a href="https://de.wikipedia.org/wiki/Vorname_(Deutschland)">Vorname</a> */ public final class Firstname implements Comparable<Firstname>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, Firstname> CACHE = new WeakHashMap<>(); /** * Firstname regexp. */ private static final Pattern FIRSTNAME_REGEXP = Pattern.compile("^[\\p{L}][\\p{L}-]*$"); //$NON-NLS-1$ /** * Firstname. */ private final String firstname; /** * Constructor. * * @param firstname Firstname (maximum 32 characters) * * @throws NullPointerException if firstname is null * @throws IllegalArgumentException if firstname contains unsupported characters or is to long or short */ private Firstname(final String firstname) { super(); Objects.requireNonNull(firstname, "firstname"); //$NON-NLS-1$ if ((firstname.length() < 1) || (firstname.length() > 32)) ===================================================== == File: src/main/java/de/powerstat/validation/values/Gender.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import de.powerstat.validation.interfaces.IValueObject; /** * Gender/Sex. * * This is my own derivation of the following website: * https://at.wikimannia.org/60_Geschlechtsidentit%C3%A4ten * From my point of view trans-gender is not a gender - it is a change of the gender over time. * For example when someone is born as male he will become a female after a transformation. * During the transformation BOTH or VARIABLE might be used. * This will be handled in the Person class by a history of the gender. * * @see <a href="https://at.wikimannia.org/60_Geschlechtsidentitäten">Geschlechtsidentitäten</a> * * Not DSGVO relevant. */ public enum Gender implements IValueObject { /** * Unknown/undefined gender. */ UNKNOWN(0), /** * Female. */ FEMALE(1), /** * Male. */ MALE(2), /** * Both female and male at the same time. */ BOTH(3), /** * Variable, female today, male tomorrow for example (not trans). */ VARIABLE(4), ===================================================== == File: src/main/java/de/powerstat/validation/values/GregorianCalendar.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Map; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import de.powerstat.validation.interfaces.IValueObject; /** * Gregorian calendar. * * Not DSGVO relevant. * * TODO More country reform dates */ public final class GregorianCalendar implements Comparable<GregorianCalendar>, IValueObject { /* * * Cache for singletons. */ // private static final Map<Country, GregorianCalendar> CACHE = new WeakHashMap<>(); /** * Days per month. */ private static final int[] DAYS_IN_MONTH = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; /** * Gregorian calendar reform before and after dates. */ private static final Map<Country, Map<String, Map<String, Long>>> REFORM_DATES = new ConcurrentHashMap<>(); /** * After. */ private static final String AFTER = "after"; //$NON-NLS-1$ /** * Before. */ private static final String BEFORE = "before"; //$NON-NLS-1$ /** * Days. */ ===================================================== == File: src/main/java/de/powerstat/validation/values/GregorianDate.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Gregorian calendar date. * * Not DSGVO relevant. * * TODO next day * TODO previous day * TODO add x days * TODO subtract x days * TODO add days, months, years * TODO subtract days, months, years * TODO getJD * TODO getMJD * TODO getWeekday * TODO date - date = days * TODO date - date = days, months, years * TODO get WeekNr * TODO format date * TODO parse date * TODO min, max */ public final class GregorianDate implements Comparable<GregorianDate>, IValueObject { /* * * Cache for singletons. */ // private static final Map<NTuple4<GregorianCalendar, Year, Month, Day>, GregorianDate> CACHE = new WeakHashMap<>(); /** * Output format. */ private static final String FORMAT_TWODIGIT = "%02d"; //$NON-NLS-1$ /** * Year format. */ private static final String FORMAT_FOURDIGIT = "%04d"; //$NON-NLS-1$ /** ===================================================== == File: src/main/java/de/powerstat/validation/values/Hostname.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Objects; import java.util.regex.Pattern; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import de.powerstat.validation.generated.GeneratedTlds; import de.powerstat.validation.interfaces.IValueObject; /** * Hostname. * * Probably DSGVO relevant. * * TODO Verify TopLevelDomain * TODO ping ok? */ public final class Hostname implements Comparable<Hostname>, IValueObject { /** * Logger. */ private static final Logger LOGGER = LogManager.getLogger(Hostname.class); /* * * Cache for singletons. */ // private static final Map<String, Hostname> CACHE = new WeakHashMap<>(); /** * Hostname regexp. */ private static final Pattern HOSTNAME_REGEXP = Pattern.compile("^[.0-9a-zA-Z-]+$"); //$NON-NLS-1$ /** * Escaped dot. */ private static final String ESC_DOT = "\\."; //$NON-NLS-1$ /** ===================================================== == File: src/main/java/de/powerstat/validation/values/Hour.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Hour. * * Not DSGVO relevant. * * TODO Listener * TODO minutesWithin = 60 * TODO min, max */ public final class Hour implements Comparable<Hour>, IValueObject { /** * Overflow constant. */ private static final String OVERFLOW = "Overflow"; //$NON-NLS-1$ /** * Underflow contant. */ private static final String UNDERFLOW = "Underflow"; //$NON-NLS-1$ /* * * Cache for singletons. */ // private static final Map<Integer, Hour> CACHE = new WeakHashMap<>(); /** * Hour. */ private final int hour; /** * Constructor. * * @param hour Hour 0-23 * @throws IndexOutOfBoundsException When the hour is less than 0 or greater than 23 */ private Hour(final int hour) ===================================================== == File: src/main/java/de/powerstat/validation/values/Hours.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Hours. * * Not DSGVO relevant. * * TODO min, max */ public final class Hours implements Comparable<Hours>, IValueObject { /* * * Cache for singletons. */ // private static final Map<Long, Hours> CACHE = new WeakHashMap<>(); /** * Hours. */ private final long hours; /** * Constructor. * * @param hours Hours 0-.. * @throws IndexOutOfBoundsException When the hours is less than 0 */ private Hours(final long hours) { super(); if (hours < 0) { throw new IndexOutOfBoundsException("Negative hours are not allowed"); //$NON-NLS-1$ } this.hours = hours; } /** * Hours factory. ===================================================== == File: src/main/java/de/powerstat/validation/values/IBAN.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.math.BigInteger; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; import de.powerstat.validation.values.impl.IBANVerifierAbstractFactory; /** * IBAN. * * Probably DSGVO relevant. * * TODO https://openiban.com/ * TODO Human format in/out */ public final class IBAN implements Comparable<IBAN>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, IBAN> CACHE = new WeakHashMap<>(); /** * IBAN regexp. */ @SuppressWarnings("java:S5867") private static final Pattern IBAN_REGEXP = Pattern.compile("^[A-Z]{2}\\d{2}[0-9A-Z]{11,30}$"); //$NON-NLS-1$ /** * IBAN. */ private final String iban; /** * Constructor. * * @param iban IBAN * @throws NullPointerException if iban is null * @throws IllegalArgumentException if iban is not an correct iban */ private IBAN(final String iban) { ===================================================== == File: src/main/java/de/powerstat/validation/values/impl/IBANVerifier.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.impl; import java.util.Map; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import de.powerstat.validation.containers.NTuple2; /** * IBAN verifier. */ public final class IBANVerifier { /** * Cache for singletons. */ private static final Map<NTuple2<Integer, String>, IBANVerifier> CACHE = new ConcurrentHashMap<>(); /** * IBAN length. */ private final int length; /** * IBAN regexp. */ private final String regexp; /** * Constructor. * * @param length Country specific maximum IBAN length. * @param regexp Country specific regular expression */ private IBANVerifier(final int length, final String regexp) { super(); if ((length < 15) || (length > 34)) { throw new IllegalArgumentException("Wrong length, must be between 15 and 34"); //$NON-NLS-1$ } Objects.requireNonNull(regexp, "regexp"); //$NON-NLS-1$ // TODO test regexp length and allowed characters if ((regexp.charAt(0) != '^') || (regexp.charAt(regexp.length() - 1) != '$')) ===================================================== == File: src/main/java/de/powerstat/validation/values/impl/IBANVerifierAbstractFactory.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.impl; import de.powerstat.validation.values.Country; // import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Abstract factory for country specific IBAN verifiers. * * TODO Generate this class */ // @SuppressFBWarnings({"CC_CYCLOMATIC_COMPLEXITY", "CE_CLASS_ENVY"}) @SuppressWarnings({"java:S1541", "java:S3242"}) public final class IBANVerifierAbstractFactory { /** * Private constructor. */ private IBANVerifierAbstractFactory() { super(); } /** * Create IBAN verifier for country. * * @param country Country * @return IBANVerifier object for country */ @SuppressWarnings("java:S1479") public static IBANVerifier createIBANVerifier(final Country country) { switch (country.stringValue()) { case "EG": //$NON-NLS-1$ return IBANVerifier.of(27, "^EG[0-9]{2}[0-9]{23}$"); //$NON-NLS-1$ case "AL": //$NON-NLS-1$ return IBANVerifier.of(28, "^AL[0-9]{2}[0-9]{7}[0-9A-Z][0-9]{16}$"); //$NON-NLS-1$ case "DZ": //$NON-NLS-1$ return IBANVerifier.of(24, "^DZ[0-9]{2}[0-9]{18}[0-9A-Z]{2}$"); //$NON-NLS-1$ case "AD": //$NON-NLS-1$ return IBANVerifier.of(24, "^AD[0-9]{2}[0-9]{20}$"); //$NON-NLS-1$ case "AO": //$NON-NLS-1$ return IBANVerifier.of(25, "^AO[0-9]{2}[0-9]{19}[0-9A-Z]{2}$"); //$NON-NLS-1$ case "AZ": //$NON-NLS-1$ ===================================================== == File: src/main/java/de/powerstat/validation/values/impl/package-info.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ /** * Internal implementations. */ package de.powerstat.validation.values.impl; ===================================================== == File: src/main/java/de/powerstat/validation/values/IPV4Address.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * IP V4 address. * * DSGVO relevant. * * TODO convert to IP V6 format * TODO https://datahub.io/core/geoip2-ipv4/r/geoip2-ipv4.csv * TODO ping ok? */ public final class IPV4Address implements Comparable<IPV4Address>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, IPV4Address> CACHE = new WeakHashMap<>(); /** * Class c 192. */ private static final String CLASS_C_192 = "192"; //$NON-NLS-1$ /** * 100. */ private static final String C100 = "100"; //$NON-NLS-1$ /** * 198. */ private static final String C198 = "198"; //$NON-NLS-1$ /** * 0. */ private static final String ZERO = "0"; //$NON-NLS-1$ /** * IP V4 regexp. ===================================================== == File: src/main/java/de/powerstat/validation/values/IPV4Mask.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * IP V4 mask. * * Not DSGVO relevant. * * TODO IPV4Address filterMin(IPV4Address) 0 * TODO IPV4Address filterMax(IPV4Address) 255 */ public final class IPV4Mask implements Comparable<IPV4Mask>, IValueObject { /* * * Cache for singletons. */ // private static final Map<Integer, IPV4Mask> CACHE = new WeakHashMap<>(); /** * 0. */ private static final String ZERO = "0"; //$NON-NLS-1$ /** * Bitmask array. */ private static final String[] BITMASKS = {IPV4Mask.ZERO, "128", "192", "224", "240", "248", "252", "254", "255"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ /** * IP V4 mask regexp. */ private static final Pattern IPV4_MASK_REGEXP = Pattern.compile("^(((255\\.){3}(255|254|252|248|240|224|192|128|0))|((255\\.){2}(254|252|248|240|224|192|128|0)\\.0)|((255\\.)(254|252|248|240|224|192|128|0)(\\.0){2})|((254|252|248|240|224|192|128|0)(\\.0){3}))$"); //$NON-NLS-1$ /** * Prefix length. */ private final int length; /** * Mask. */ ===================================================== == File: src/main/java/de/powerstat/validation/values/IPV6Address.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Locale; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * IP V6 address. * * DSGVO relevant. * * TODO ping ok? */ public final class IPV6Address implements Comparable<IPV6Address>, IValueObject { /* * * Logger. */ // private static final Logger LOGGER = LogManager.getLogger(IPV6Address.class); /* * * Cache for singletons. */ // private static final Map<String, IPV6Address> CACHE = new WeakHashMap<>(); /** * IP V6 regexp. */ private static final Pattern IPV6_REGEXP = Pattern.compile("^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$"); //$NON-NLS-1$ /** * IPV6 zero block. */ private static final String BLOCK_ZERO = "0000"; //$NON-NLS-1$ /** * Hex output format. */ private static final String HEX_OUTPUT = "%02x"; //$NON-NLS-1$ /** * IPV6 block expansion. */ ===================================================== == File: src/main/java/de/powerstat/validation/values/IPV6Mask.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * IP V6 mask. * * Not DSGVO relevant. */ public final class IPV6Mask implements Comparable<IPV6Mask>, IValueObject { /* * * Cache for singletons. */ // private static final Map<Integer, IPV6Mask> CACHE = new WeakHashMap<>(); /** * Prefix length. */ private final int length; /** * Constructor. * * @param length Prefix length (0-128) * @throws IndexOutOfBoundsException if the prefix length is < 0 or > 128 */ private IPV6Mask(final int length) { super(); if ((length < 0) || (length > 128)) { throw new IndexOutOfBoundsException("Netmask prefix < 0 or > 128"); //$NON-NLS-1$ } this.length = length; } /** * IPV6Mask factory. * * @param length IP V6 prefix length (0-128) ===================================================== == File: src/main/java/de/powerstat/validation/values/Language.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.generated.GeneratedISO6391; import de.powerstat.validation.interfaces.IValueObject; /** * Language ISO 639-1. * * Not DSGVO relevant. * * TODO Languages names in english * TODO Translations */ public final class Language implements Comparable<Language>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, Language> CACHE = new WeakHashMap<>(); /** * Language regexp. */ @SuppressWarnings("java:S5867") private static final Pattern LANGUAGE_REGEXP = Pattern.compile("^[a-z]{2}$"); //$NON-NLS-1$ /** * ISO 639-1 language code. */ private final String code; /** * Constructor. * * @param code ISO 639-1 code * @throws NullPointerException if code is null * @throws IllegalArgumentException if code is not a known 639-1 code */ private Language(final String code) { super(); ===================================================== == File: src/main/java/de/powerstat/validation/values/Lastname.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * Lastname. * * DSGVO relevant. */ public final class Lastname implements Comparable<Lastname>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, Lastname> CACHE = new WeakHashMap<>(); /** * Lastname regexp. */ private static final Pattern LASTNAME_REGEXP = Pattern.compile("^[\\p{L}][\\p{L} -]*$"); //$NON-NLS-1$ /** * Lastname. */ private final String lastname; /** * Constructor. * * @param lastname Lastname (maximum 40 characters) * * @throws NullPointerException if lastname is null * @throws IllegalArgumentException if lastname contains unsupported characters or is to long or short */ private Lastname(final String lastname) { super(); Objects.requireNonNull(lastname, "lastname"); //$NON-NLS-1$ if ((lastname.length() < 1) || (lastname.length() > 40)) { throw new IllegalArgumentException("Lastname with wrong length"); //$NON-NLS-1$ ===================================================== == File: src/main/java/de/powerstat/validation/values/Lines.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * Address Lines. * * Not DSGVO relevant. */ public final class Lines implements Comparable<Lines>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, Lines> CACHE = new WeakHashMap<>(); /** * Lines fregexp. */ @SuppressWarnings("java:S6035") private static final Pattern LINES_REGEXP = Pattern.compile("^([\\p{L}\\p{Digit},.& -]|\\R)*+$"); //$NON-NLS-1$ /** * Lines. */ private final String lines; /** * Constructor. * * @param lines Lines (1-5) * @throws NullPointerException if lines is null * @throws IllegalArgumentException if lines is not a correct Lines */ private Lines(final String lines) { super(); Objects.requireNonNull(lines, "lines"); //$NON-NLS-1$ if ((lines.length() < 1) || (lines.length() > 200)) { throw new IllegalArgumentException("Lines with wrong length"); //$NON-NLS-1$ ===================================================== == File: src/main/java/de/powerstat/validation/values/MACAddress.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Arrays; import java.util.Locale; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * Canonical Media-Access-Control-Adresse (MAC). * * TODO getManufacturer name * TODO Exists in network * http://standards-oui.ieee.org/oui/oui.csv */ public final class MACAddress implements Comparable<MACAddress>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, MACAddress> CACHE = new WeakHashMap<>(); /** * Hex 00. */ private static final String H00 = "00"; //$NON-NLS-1$ /** * Hex 01. */ private static final String H01 = "01"; //$NON-NLS-1$ /** * Hex 33. */ private static final String H33 = "33"; //$NON-NLS-1$ /** * Hex 5e. */ private static final String H5E = "5e"; //$NON-NLS-1$ /** * Hex ff. ===================================================== == File: src/main/java/de/powerstat/validation/values/Millisecond.java ===================================================== /* * Copyright (C) 2021-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Millisecond. * * Not DSGVO relevant. * * TODO Listener * TODO min, max */ public final class Millisecond implements Comparable<Millisecond>, IValueObject { /* * * Cache for singletons. */ // private static final Map<Integer, Millisecond> CACHE = new WeakHashMap<>(); /** * Overflow constant. */ private static final String OVERFLOW = "Overflow"; //$NON-NLS-1$ /** * Underflow constant. */ private static final String UNDERFLOW = "Underflow"; //$NON-NLS-1$ /** * Milliseond. */ private final int millisecond; /** * Constructor. * * @param millisecond Millisecond 0-999 * @throws IndexOutOfBoundsException When the milliseond is less than 0 or greater than 999 */ private Millisecond(final int millisecond) { ===================================================== == File: src/main/java/de/powerstat/validation/values/Milliseconds.java ===================================================== /* * Copyright (C) 2021-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Milliseconds. * * Not DSGVO relevant. * * TODO min, max */ public final class Milliseconds implements Comparable<Milliseconds>, IValueObject { /* * * Cache for singletons. */ // private static final Map<Long, Milliseconds> CACHE = new WeakHashMap<>(); /** * Milliseonds. */ private final long milliseconds; /** * Constructor. * * @param milliseconds Milliseconds >= 0 * @throws IndexOutOfBoundsException When the milliseonds is less than 0 */ private Milliseconds(final long milliseconds) { super(); if (milliseconds < 0) { throw new IndexOutOfBoundsException("Milliseconds out of range (0-Long.MAX_VALUE)!"); //$NON-NLS-1$ } this.milliseconds = milliseconds; } /** * Milliseconds factory. ===================================================== == File: src/main/java/de/powerstat/validation/values/Minute.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Minute. * * Not DSGVO relevant. * * TODO Listener * TODO secondsWithin = 60 * TODO min, max */ public final class Minute implements Comparable<Minute>, IValueObject { /** * Overlfow constant. */ private static final String OVERFLOW = "Overflow"; //$NON-NLS-1$ /** * Underflow constant. */ private static final String UNDERFLOW = "Underflow"; //$NON-NLS-1$ /* * * Cache for singletons. */ // private static final Map<Integer, Minute> CACHE = new WeakHashMap<>(); /** * Minute. */ private final int minute; /** * Constructor. * * @param minute Minute 0-59 * @throws IndexOutOfBoundsException When the minute is less than 0 or greater than 59 */ private Minute(final int minute) ===================================================== == File: src/main/java/de/powerstat/validation/values/Minutes.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Minutes. * * Not DSGVO relevant. * * TODO min, max */ public final class Minutes implements Comparable<Minutes>, IValueObject { /* * * Cache for singletons. */ // private static final Map<Long, Minutes> CACHE = new WeakHashMap<>(); /** * Minutes. */ private final long minutes; /** * Constructor. * * @param minutes Minutes 0-.. * @throws IndexOutOfBoundsException When the minutes is less than 0 */ private Minutes(final long minutes) { super(); if (minutes < 0) { throw new IndexOutOfBoundsException("Negative minutes are not allowed"); //$NON-NLS-1$ } this.minutes = minutes; } /** * Minutes factory. ===================================================== == File: src/main/java/de/powerstat/validation/values/Month.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Month. * * Not DSGVO relevant. * * TODO constructor with year * TODO daysWithin() = 31, 30, 29, 28, n (Year specific for february, or october 1582) * TODO Listener * TODO Translations short/long * TODO min, max */ public final class Month implements Comparable<Month>, IValueObject { /* * * Cache for singletons. */ // private static final Map<Integer, Month> CACHE = new WeakHashMap<>(); /** * Overflow constant. */ private static final String OVERFLOW = "Overflow"; //$NON-NLS-1$ /** * Underflow constant. */ private static final String UNDERFLOW = "Underflow"; //$NON-NLS-1$ /** * Month. */ private final int month; /** * Constructor. * * @param month Month 1-12 * @throws IndexOutOfBoundsException When the month is less than 1 or greater than 12 ===================================================== == File: src/main/java/de/powerstat/validation/values/MonthDay.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * DayMonth. * * Not DSGVO relevant. * * TODO LeapYear support * TODO min, max */ public final class MonthDay implements Comparable<MonthDay>, IValueObject { /** * Overflow constant. */ private static final String OVERFLOW = "Overflow"; //$NON-NLS-1$ /** * Underflow constant. */ private static final String UNDERFLOW = "Underflow"; //$NON-NLS-1$ /** * Date separator. */ private static final String DATE_SEP = "-"; //$NON-NLS-1$ /* * * Cache for singletons. */ // private static final Map<Integer, MonthDay> CACHE = new WeakHashMap<>(); /** * Month. */ private final Month month; /** * Day. */ private final Day day; ===================================================== == File: src/main/java/de/powerstat/validation/values/Months.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Months. * * Not DSGVO relevant. * * TODO min, max */ public final class Months implements Comparable<Months>, IValueObject { /* * * Cache for singletons. */ // private static final Map<Long, Months> CACHE = new WeakHashMap<>(); /** * Month. */ private final long months; /** * Constructor. * * @param months Months 0-.. * @throws IndexOutOfBoundsException When the months is less than 0 */ private Months(final long months) { super(); if (months < 0) { throw new IndexOutOfBoundsException("Negative months are not allowed"); //$NON-NLS-1$ } this.months = months; } /** * Months factory. ===================================================== == File: src/main/java/de/powerstat/validation/values/Neighbourhood.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * Address Neighbourhood. * * Not DSGVO relevant. */ public final class Neighbourhood implements Comparable<Neighbourhood>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, Neighbourhood> CACHE = new WeakHashMap<>(); /** * Neighbourhood fregexp. */ private static final Pattern NEIGHBOURHOOD_REGEXP = Pattern.compile("^[\\p{L}][\\p{L}\\p{Digit}. -]*$"); //$NON-NLS-1$ /** * Neighbourhood. */ private final String neighbourhood; /** * Constructor. * * @param neighbourhood Neighbourhood * @throws NullPointerException if neighbourhood is null * @throws IllegalArgumentException if neighbourhood is not a correct neighbourhood */ private Neighbourhood(final String neighbourhood) { super(); Objects.requireNonNull(neighbourhood, "neighbourhood"); //$NON-NLS-1$ if ((neighbourhood.length() < 1) || (neighbourhood.length() > 64)) { throw new IllegalArgumentException("Neighbourhood with wrong length"); //$NON-NLS-1$ } ===================================================== == File: src/main/java/de/powerstat/validation/values/package-info.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ /** * Validation value classes. */ package de.powerstat.validation.values; ===================================================== == File: src/main/java/de/powerstat/validation/values/Password.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; import de.powerstat.validation.values.strategies.IPasswordStrategy; import de.powerstat.validation.values.strategies.PasswordDefaultStrategy; /** * Password. * * DSGVO relevant. * * TODO memory protection * * TODO encryption algorithm (hashtypes) * TODO salt * * TODO Disallow email address via verifyPassword * TODO Disallow user name (case) via verifyPassword * TODO Disallow user ID via verifyPassword * * TODO password age in days * * TODO Repeated/Reversed history length via verifyPassword * * TODO validation chain * * TODO Password generator * * TODO Verify that password is not in: * https://www.datendieter.de/item/Haeufige_Passwoerter * https://www.passwortfuchs.de/passwortliste.php * https://crackstation.net/crackstation-wordlist-password-cracking-dictionary.htm * https://github.com/danielmiessler/SecLists/tree/master/Passwords * https://weakpass.com/wordlist * https://wiki.skullsecurity.org/Passwords * https://thehacktoday.com/password-cracking-dictionarys-download-for-free/ */ public final class Password implements Comparable<Password>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, Password> CACHE = new WeakHashMap<>(); ===================================================== == File: src/main/java/de/powerstat/validation/values/Percent.java ===================================================== /* * Copyright (C) 2024 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Percent 0-100. * * Not DSGVO relevant. */ public final class Percent implements Comparable<Percent>, IValueObject { /** * Percent. */ private final int percent; /** * Constructor. * * @param percent Percent 0-100 * @throws IndexOutOfBoundsException When the percent is less than 0 or greater than 100 */ private Percent(final int percent) { super(); if ((percent < 0) || (percent > 100)) { throw new IndexOutOfBoundsException("Percent number out of range (0-100)!"); //$NON-NLS-1$ } this.percent = percent; } /** * Percent factory. * * @param percent Percent 0-100 * @return Percent object */ public static Percent of(final int percent) { return new Percent(percent); } ===================================================== == File: src/main/java/de/powerstat/validation/values/PoBoxNumber.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Address Post office box number. * * DSGVO relevant. */ public final class PoBoxNumber implements Comparable<PoBoxNumber>, IValueObject { /* * * Cache for singletons. */ // private static final Map<Long, PoBoxNumber> CACHE = new WeakHashMap<>(); /** * Post office box number. */ private final long poBoxNumber; /** * Constructor. * * @param poBoxNumber PO box number 1-.. * @throws IndexOutOfBoundsException When the poBoxNumber is less than 1 */ private PoBoxNumber(final long poBoxNumber) { super(); if (poBoxNumber < 1) { throw new IndexOutOfBoundsException("POBoxNumber number out of range (1-..)!"); //$NON-NLS-1$ } this.poBoxNumber = poBoxNumber; } /** * PoBoxNumber factory. * * @param poBoxNumber PoBox number 1-.. ===================================================== == File: src/main/java/de/powerstat/validation/values/Port.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Port. * * Not DSGVO relevant. * * TODO min, max? */ public final class Port implements Comparable<Port>, IValueObject { /* * * Cache for singletons. */ // private static final Map<Integer, Port> CACHE = new WeakHashMap<>(); /** * Port. */ private final int port; /** * Constructor. * * @param port Port 0-65535 * @throws IndexOutOfBoundsException When the port is less than 0 or greater than 65535 */ private Port(final int port) { super(); if ((port < 0) || (port > 65535)) { throw new IndexOutOfBoundsException("Port number out of range (0-65535)!"); //$NON-NLS-1$ } this.port = port; } /** * Port factory. ===================================================== == File: src/main/java/de/powerstat/validation/values/PostalCode.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * Address Postal code. * * Not DSGVO relevant. * * https://en.wikipedia.org/wiki/List_of_postal_codes * https://de.wikipedia.org/wiki/Liste_der_Postleitsysteme * * TODO Country specific */ public final class PostalCode implements Comparable<PostalCode>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, PostalCode> CACHE = new WeakHashMap<>(); /** * Postal code regexp. */ private static final Pattern POSTALCODE_REGEXP = Pattern.compile("^[0-9A-Z -]{3,11}$"); //$NON-NLS-1$ /** * Postal code. */ private final String postalCode; /** * Constructor. * * @param postalCode Postal code * @throws NullPointerException if postalCode is null * @throws IllegalArgumentException if postalCode is not a correct postalCode */ private PostalCode(final String postalCode) { super(); ===================================================== == File: src/main/java/de/powerstat/validation/values/Province.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * Address Province. * * Not DSGVO relevant. */ public final class Province implements Comparable<Province>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, Province> CACHE = new WeakHashMap<>(); /** * Province regexp. */ private static final Pattern PROVINCE_REGEXP = Pattern.compile("^[\\p{L}][\\p{L} -]*$"); //$NON-NLS-1$ /** * Province. */ private final String province; /** * Constructor. * * @param province Province name * @throws NullPointerException if province is null * @throws IllegalArgumentException if province is not a correct province name */ private Province(final String province) { super(); Objects.requireNonNull(province, "province"); //$NON-NLS-1$ if ((province.length() < 1) || (province.length() > 18)) { throw new IllegalArgumentException("Province with wrong length"); //$NON-NLS-1$ } ===================================================== == File: src/main/java/de/powerstat/validation/values/ScreenSize.java ===================================================== /* * Copyright (C) 2021-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Screen size. * * Not DSGVO relevant. * * TODO min, max */ public final class ScreenSize implements Comparable<ScreenSize>, IValueObject { /* * * Cache for singletons. */ // private static final Map<NTuple3<Integer, Integer, String>, ScreenSize> CACHE = new WeakHashMap<>(); /** * Screen width (1-8192). */ private final int width; /** * Screen height (1-8192). */ private final int height; /** * Screen size name. */ private final String name; /** * Constructor. * * @param width Screen width in pixel (1-8192) * @param height Screen height in pixel (1-8192) * @param name Screen size name */ private ScreenSize(final int width, final int height, final String name) { ===================================================== == File: src/main/java/de/powerstat/validation/values/Second.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Second. * * Not DSGVO relevant. * * TODO Constructor with day, month, year, hour, minute * TODO Listener (mod 60 = 0) * TODO millisecondsWithin = 1000 * TODO min, max */ public final class Second implements Comparable<Second>, IValueObject { /** * Overflow constant. */ private static final String OVERFLOW = "Overflow"; //$NON-NLS-1$ /** * Underflow constant. */ private static final String UNDERFLOW = "Underflow"; //$NON-NLS-1$ /* * * Cache for singletons. */ // private static final Map<Integer, Second> CACHE = new WeakHashMap<>(); /** * Second. */ private final int second; /** * Constructor. * * @param second Second 0-59/60 * @throws IndexOutOfBoundsException When the second is less than 0 or greater than 59/60 */ ===================================================== == File: src/main/java/de/powerstat/validation/values/Seconds.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Seconds. * * Not DSGVO relevant. * * TODO inMinutes() * TODO min, max */ public final class Seconds implements Comparable<Seconds>, IValueObject { /* * * Cache for singletons. */ // private static final Map<Long, Seconds> CACHE = new WeakHashMap<>(); /** * Seconds. */ private final long seconds; /** * Constructor. * * @param seconds Seconds 0-.. * @throws IndexOutOfBoundsException When the seconds is less than 0 */ private Seconds(final long seconds) { super(); if (seconds < 0) { throw new IndexOutOfBoundsException("Negative seconds are not allowed"); //$NON-NLS-1$ } this.seconds = seconds; } /** ===================================================== == File: src/main/java/de/powerstat/validation/values/SIBaseUnits.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import de.powerstat.validation.interfaces.IValueObject; /** * SI base units. * * @see <a href="https://en.wikipedia.org/wiki/International_System_of_Units">International System of Units</a> * * Not DSGVO relevant. */ public enum SIBaseUnits implements IValueObject { /** * Time in seconds. */ SECOND("s"), /** * Length in metre. */ METRE("m"), /** * Mass in kilogram. */ KILOGRAM("kg"), /** * Wlectric current in ampere. */ AMPERE("A"), /** * thermodynamic temperature in kelvin. */ KELVIN("K"), /** * Amount of substance in mole. */ MOLE("mol"), /** * Luminous intensity in candela. ===================================================== == File: src/main/java/de/powerstat/validation/values/SIDerivedUnits.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import de.powerstat.validation.interfaces.IValueObject; /** * SI derived units. * * @see <a href="https://en.wikipedia.org/wiki/International_System_of_Units">International System of Units</a> * * Not DSGVO relevant. */ public enum SIDerivedUnits implements IValueObject { /** * Plane angle. */ RADIAN("rad"), /** * Solid angle. */ STERADIAN("sr"), /** * Frequency. */ HERTZ("Hz"), /** * Force, weight. */ NEWTON("N"), /** * Pressure, stress. */ PASCAL("Pa"), /** * Energy, work, heat. */ JOULE("J"), /** * Power, radiant flux. ===================================================== == File: src/main/java/de/powerstat/validation/values/SIPrefixes.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.EnumSet; import java.util.Locale; import java.util.NavigableSet; import java.util.NoSuchElementException; import java.util.TreeSet; import de.powerstat.validation.interfaces.IValueObject; /** * SI prefixes. * * https://en.wikipedia.org/wiki/Metric_prefix */ @SuppressWarnings("PMD.AvoidFieldNameMatchingMethodName") public enum SIPrefixes implements IValueObject { /** * Quecto. */ QUECTO(-30, "q"), /** * Ronto. */ RONTO(-27, "r"), /** * Yocto. */ YOCTO(-24, "y"), /** * Zepto. */ ZEPTO(-21, "z"), /** * Atto. */ ATTO(-18, "a"), /** * Femto. ===================================================== == File: src/main/java/de/powerstat/validation/values/strategies/IPasswordStrategy.java ===================================================== /* * Copyright (C) 2020-2022 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.strategies; /** * Password strategy interface. */ public interface IPasswordStrategy { /** * Validation strategy. * * @param password Password * @throws IllegalArgumentException If the password does not match the configured parameters */ void validationStrategy(String password); } ===================================================== == File: src/main/java/de/powerstat/validation/values/strategies/IUsernameStrategy.java ===================================================== /* * Copyright (C) 2020-2022 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.strategies; /** * Username strategy interface. */ public interface IUsernameStrategy { /** * Validation strategy. * * @param username Username * @return true: if username is an email, false otherwise * @throws IllegalArgumentException If the username does not match the configured parameters */ boolean validationStrategy(String username); } ===================================================== == File: src/main/java/de/powerstat/validation/values/strategies/package-info.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ /** * Validation value strategy classes. */ package de.powerstat.validation.values.strategies; ===================================================== == File: src/main/java/de/powerstat/validation/values/strategies/PasswordConfigurableStrategy.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.strategies; import java.util.HashSet; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import de.powerstat.validation.containers.NTuple9; /** * Configurable password strategy. * * TODO rainbow tables * TODO https://haveibeenpwned.com/ * * TODO struct parameter * * TODO chain strategy */ public class PasswordConfigurableStrategy implements IPasswordStrategy { /** * Cache for singletons. */ private static final Map<NTuple9<Integer, Integer, String, Integer, Integer, Integer, Integer, Integer, Integer>, PasswordConfigurableStrategy> CACHE = new ConcurrentHashMap<>(); /** * Minimum allowed username length. */ private final int minLength; /** * Maximum allowed username length. */ private final int maxLength; /** * Regular expression for matching allowed characters. */ private final String regexp; /** * Minimum number of required numeric characters. */ ===================================================== == File: src/main/java/de/powerstat/validation/values/strategies/PasswordDefaultStrategy.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.strategies; /** * Password default validation strategy. */ public final class PasswordDefaultStrategy extends PasswordConfigurableStrategy { /** * Cache for singleton. */ private static final PasswordDefaultStrategy CACHE = new PasswordDefaultStrategy(); /** * Default Constructor. */ private PasswordDefaultStrategy() { super(8, 254, "^[!§$%&/()=?öäüÖÄÜ,.:;_@0-9a-zA-Z-]+$", 0, 1, 0, 0, 0, 3); //$NON-NLS-1$ } /** * Password validation strategy factory. * * @return PasswordStrategy object */ public static IPasswordStrategy of() { return PasswordDefaultStrategy.CACHE; } } ===================================================== == File: src/main/java/de/powerstat/validation/values/strategies/UsernameConfigurableStrategy.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.strategies; import java.util.Map; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import de.powerstat.validation.containers.NTuple4; import de.powerstat.validation.values.EMail; /** * Configurable username validation strategy. */ public class UsernameConfigurableStrategy implements IUsernameStrategy { /* * * Logger. */ // private static final Logger LOGGER = LogManager.getLogger(UsernameConfigurableStrategy.class); /** * Cache for singletons. */ private static final Map<NTuple4<Integer, Integer, String, HandleEMail>, UsernameConfigurableStrategy> CACHE = new ConcurrentHashMap<>(); /** * Minimum allowed username length. */ private final int minLength; /** * Maximum allowed username length. */ private final int maxLength; /** * Regular expression for matching allowed characters. */ private final String regexp; /** * EMail handling. * * Could be EMAIL_DENIED, EMAIL_REQUIRED or EMAIL_POSSIBLE */ private final HandleEMail emailHandling; ===================================================== == File: src/main/java/de/powerstat/validation/values/strategies/UsernameDefaultStrategy.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.strategies; /** * Username default validation strategy. * * Minimum 2 characters, maximum 254 characters, can be an email address. * Allowed characters: @./_0-9a-zA-Z- */ public final class UsernameDefaultStrategy extends UsernameConfigurableStrategy { /** * Cache for singleton. */ private static final UsernameDefaultStrategy CACHE = new UsernameDefaultStrategy(); /** * Default Constructor. */ private UsernameDefaultStrategy() { super(2, 254, "^[@./_0-9a-zA-Z-]+$", HandleEMail.EMAIL_POSSIBLE); //$NON-NLS-1$ } /** * Username validation strategy factory. * * @return UsernameStrategy object */ public static IUsernameStrategy of() { return UsernameDefaultStrategy.CACHE; } } ===================================================== == File: src/main/java/de/powerstat/validation/values/Street.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * Address Street. * * Not DSGVO relevant. * * TODO Verify with openstreetmap */ public final class Street implements Comparable<Street>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, Street> CACHE = new WeakHashMap<>(); /** * Street regexp. */ private static final Pattern STREET_REGEXP = Pattern.compile("^[\\p{L}][\\p{L}. -]*$"); //$NON-NLS-1$ /** * Street. */ private final String street; /** * Constructor. * * @param street Street name * @throws NullPointerException if street is null * @throws IllegalArgumentException if street is not a correct Street name */ private Street(final String street) { super(); Objects.requireNonNull(street, "street"); //$NON-NLS-1$ if ((street.length() < 1) || (street.length() > 32)) { ===================================================== == File: src/main/java/de/powerstat/validation/values/SubBuilding.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.interfaces.IValueObject; /** * Address Sub building. * * Possibly DSGVO relevant. */ public final class SubBuilding implements Comparable<SubBuilding>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, SubBuilding> CACHE = new WeakHashMap<>(); /** * Subbuilding regexp. */ private static final Pattern SUBBUILDING_REGEXP = Pattern.compile("^[\\p{L}][\\p{L}\\p{Digit}., -]*$"); //$NON-NLS-1$ /** * Sub building. */ private final String subBuilding; /** * Constructor. * * @param subBuilding Sub building description * @throws NullPointerException if subBuilding is null * @throws IllegalArgumentException if subBuilding is not correct */ private SubBuilding(final String subBuilding) { super(); Objects.requireNonNull(subBuilding, "subBuilding"); //$NON-NLS-1$ if ((subBuilding.length() < 1) || (subBuilding.length() > 32)) { throw new IllegalArgumentException("SubBuilding with wrong length"); //$NON-NLS-1$ } ===================================================== == File: src/main/java/de/powerstat/validation/values/TopLevelDomain.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import java.util.regex.Pattern; import de.powerstat.validation.generated.GeneratedTlds; import de.powerstat.validation.interfaces.IValueObject; /** * Top level domain. * * Not DSGVO relevant. */ public final class TopLevelDomain implements Comparable<TopLevelDomain>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, TopLevelDomain> CACHE = new WeakHashMap<>(); /** * Top level domain regexp. */ private static final Pattern TOPLEVELDOMAIN_REGEXP = Pattern.compile("^[0-9a-zA-Z-]+$"); //$NON-NLS-1$ /** * Top level domain. */ private final String topLevelDomain; /** * Constructor. * * @param topLevelDomain Top level domain name (without dot) * @throws NullPointerException if top level domain is null * @throws IllegalArgumentException if top level domain is not a known top level domain */ private TopLevelDomain(final String topLevelDomain) { super(); Objects.requireNonNull(topLevelDomain, "topLevelDomain"); //$NON-NLS-1$ if ((topLevelDomain.length() < 2) || (topLevelDomain.length() > 63)) // actual (2020) longest in use is 24 { throw new IllegalArgumentException("To short or long for a top level domain"); //$NON-NLS-1$ ===================================================== == File: src/main/java/de/powerstat/validation/values/Username.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; import de.powerstat.validation.values.strategies.IUsernameStrategy; import de.powerstat.validation.values.strategies.UsernameDefaultStrategy; /** * Username. * * DSGVO relevant. * * TODO Already existing user? * TODO case sensitive or insensitive? * TODO Comparable<EMail> */ public final class Username implements Comparable<Username>, IValueObject { /* * * Cache for singletons. */ // private static final Map<String, Username> CACHE = new WeakHashMap<>(); /** * Username. */ private final String username; /** * Does the username conforms to an email address format. */ private final boolean conformsToEMailAddressFormat; /** * Constructor. * * @param validationStrategy Validation strategy * @param username Username * * @throws NullPointerException if username or validationStrategy is null * @throws IllegalArgumentException if username contains unsupported characters or is to long or short */ private Username(final IUsernameStrategy validationStrategy, final String username) ===================================================== == File: src/main/java/de/powerstat/validation/values/UUID.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Universally Unique Identifier. * * Possibly DSGVO relevant. */ public class UUID implements Comparable<UUID>, IValueObject { /** * UUID. */ private final java.util.UUID uuid; /** * Default constructor. */ private UUID() { super(); this.uuid = java.util.UUID.randomUUID(); } /** * Constructor. * * @param value UUID string value */ private UUID(final String value) { super(); this.uuid = java.util.UUID.fromString(value); } /** * UUID factory. * * @return UUID object ===================================================== == File: src/main/java/de/powerstat/validation/values/Week.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Week. * * Not DSGVO relevant. * * TODO Constructor with year * TODO Listener * TODO daysWithin = 7 * TODO min, max */ public final class Week implements Comparable<Week>, IValueObject { /** * Overflow constant. */ private static final String OVERFLOW = "Overflow"; //$NON-NLS-1$ /** * Underflow constant. */ private static final String UNDERFLOW = "Underflow"; //$NON-NLS-1$ /* * * Cache for singletons. */ // private static final Map<Integer, Week> CACHE = new WeakHashMap<>(); /** * Week. */ private final int week; /** * Constructor. * * @param week Week 1-53 * @throws IndexOutOfBoundsException When the week is less than 1 or greater than 53 */ ===================================================== == File: src/main/java/de/powerstat/validation/values/Weekday.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import de.powerstat.validation.interfaces.IValueObject; /** * Weekday. * * Not DSGVO relevant. * * TODO: getShortName (language) * TODO: getName (language) * TODO: FirstWeekday: set, get (country dependend) Monday, Sunday, Saturday * TODO: increment (weekStart Listener) * TODO: decrement (weekStart Listener) * TODO: days between weekdays (weekday - weekday) * TODO: add days mod 7 (weekday + 2) * TODO: subtract days mod 7 (weekday - 2) * TODO: iterate from first to last weekday dependend on FirstWeekday ??? */ public enum Weekday implements IValueObject { /** * Monday. */ MONDAY(1), /** * Tuesday. */ TUESDAY(2), /** * Wednesday. */ WEDNESDAY(3), /** * Thursday. */ THURSDAY(4), /** * Friday. */ FRIDAY(5), ===================================================== == File: src/main/java/de/powerstat/validation/values/Weeks.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Weeks. * * Not DSGVO relevant. * * TODO min, max */ public final class Weeks implements Comparable<Weeks>, IValueObject { /* * * Cache for singletons. */ // private static final Map<Long, Weeks> CACHE = new WeakHashMap<>(); /** * Weeks. */ private final long weeks; /** * Constructor. * * @param weeks Weeks 0-.. * @throws IndexOutOfBoundsException When the week is less than 0 */ private Weeks(final long weeks) { super(); if (weeks < 0) { throw new IndexOutOfBoundsException("Negative weeks are not allowed"); //$NON-NLS-1$ } this.weeks = weeks; } /** * Weeks factory. ===================================================== == File: src/main/java/de/powerstat/validation/values/WGS84Position.java ===================================================== /* * Copyright (C) 2021-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * World geodetic system 1984 position. * * Possibly DSGVO relevant. * * TODO precision * TODO output formats * TODO Get address for position if possible */ public final class WGS84Position implements Comparable<WGS84Position>, IValueObject { /* * * Cache for singletons. */ // private static final Map<NTuple3<Double, Double, Double>, WGS84Position> CACHE = new WeakHashMap<>(); /** * Epsilon for double compare. */ private static final double EPSILON = 0.000001D; /** * Position separator. */ private static final String SEPARATOR = " "; /** * Positions latitude specifies the north–south position of a point on the Earth's surface. * * Ranges from 0° at the Equator to 90° (North or South) at the poles. */ private final double latitude; /** * Positions longitude specifies the east–west position of a point on the Earth's surface. * * The prime meridian, which passes near the Royal Observatory, Greenwich, England, is defined as 0° longitude by convention. Positive longitudes are east of the prime meridian, and negative ones are west. */ private final double longitude; ===================================================== == File: src/main/java/de/powerstat/validation/values/Year.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Year. * * Not DSGVO relevant. * * TODO Weeks weeksWithin() = (50, 51,) 52, 53 (CalendarSystem, Country dependend ISO vs US) * TODO min, max */ public final class Year implements Comparable<Year>, IValueObject { /** * Unsupported calendar system constant. */ private static final String UNSUPPORTED_CALENDAR_SYSTEM = "Unsupported calendar system!"; /* * * Cache for singletons. */ // private static final Map<NTuple2<CalendarSystems, Long>, Year> CACHE = new WeakHashMap<>(); /** * Year of Gregorian calendar reform. * * TODO Country dependend. */ private static final long BEFORE_GREGORIAN_YEAR = 1582; /** * Calendar system. */ private final CalendarSystems calendarSystem; /** * Year. */ private final long year; /** ===================================================== == File: src/main/java/de/powerstat/validation/values/Years.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values; import java.util.Objects; import de.powerstat.validation.interfaces.IValueObject; /** * Years. * * Not DSGVO relevant. * * TODO min, max */ public final class Years implements Comparable<Years>, IValueObject { /* * * Cache for singletons. */ // private static final Map<Long, Years> CACHE = new WeakHashMap<>(); /** * Years. */ private final long years; /** * Constructor. * * @param years Years >= 0 * @throws IndexOutOfBoundsException When the year is smaller than 0 */ private Years(final long years) { super(); if (years < 0) { throw new IndexOutOfBoundsException("Negative years are not allowed"); //$NON-NLS-1$ } this.years = years; } /** * Years factory. ===================================================== == File: src/main/java/module-info.java ===================================================== /* * Copyright (C) 2019-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ /** * Validation module. */ module de.powerstat.validation { exports de.powerstat.validation; exports de.powerstat.validation.comparators; exports de.powerstat.validation.containers; exports de.powerstat.validation.entities; exports de.powerstat.validation.interfaces; exports de.powerstat.validation.values; exports de.powerstat.validation.values.strategies; requires org.apache.logging.log4j; requires org.apache.commons.net; requires com.github.spotbugs.annotations; } ===================================================== == File: src/site/asciidoc/architecture/01_introduction_and_goals.adoc ===================================================== [[section-introduction-and-goals]] == Introduction and Goals This is a collection of base classes which have been designed with domain driven design and security in mind. === Requirements Overview Functional requirements are: * TODO .Further Information * TODO === Quality Goals The top quality goals are: * TODO * Performace efficience * Low memory usage * Security/Safety * Usability * Transferability === Stakeholders The first stakeholder is the developer itself for his validation project. Second stakeholders are all other java or jvm language developers around the world, because it's an open source project. [options="header",cols="1,2,2"] |=== |Role/Name|Contact|Expectations |Kai Hofmann|powerstat@web.de|Stable api, secure, fast, simple |Every developer|unknown|Stable api, secure, fast, simple |=== ===================================================== == File: src/site/asciidoc/architecture/02_architecture_constraints.adoc ===================================================== [[section-architecture-constraints]] == Architecture Constraints Architecture constraints are as follows: * Open source * Given configurations for CheckStyle, PMD, SpotBugs, SonarQube have to be used * For documentation uml, javadoc and asciidoc have to be used ===================================================== == File: src/site/asciidoc/architecture/03_system_scope_and_context.adoc ===================================================== [[section-system-scope-and-context]] == System Scope and Context The System context is related to every Java programm or other languages that run on the jvm/graalvm. Communication could happen via Strings, Files or Streams. === Business Context The Vaidation classes are a collection/library that could be used by other developers within the java / jvm context. === Technical Context Technical interfaces in Java are: * TODO ===================================================== == File: src/site/asciidoc/architecture/04_solution_strategy.adoc ===================================================== [[section-solution-strategy]] == Solution Strategy Java has been choosen as programming language, because it is widely used. To archive key quality goals free available static analysis tools have been introduced and the ruleset (if possible) have been self made for high quality. Also unit tests have been applied with using mutation testing (pitest) and high code coverage (jacoco). Also Eclipse configurations to reach high quality have been made. ===================================================== == File: src/site/asciidoc/architecture/05_building_block_view.adoc ===================================================== [[section-building-block-view]] == Building Block View [plantuml, target=building-block, format=png] .... package de.powerstat.validation { class ValidationUtils } package de.powerstat.validation.comparators { class ComparatorEMailByDomain } package de.powerstat.validation.entities { class Person } package de.powerstat.validation.entities.impl { class HistoryOf } package de.powerstat.validation.values { class Address class AddressWithWGS84Position class BFPONumber class BIC class Block class BloodGroup class BuildingName class BuildingNr class City class Country class Currency class Day class Days class Department class DisplayAspectRatio class District class EMail class Firstname class Gener class GregorianCalendar class GregorianDate ===================================================== == File: src/site/asciidoc/architecture/06_runtime_view.adoc ===================================================== [[section-runtime-view]] == Runtime View === <Runtime Scenario 1> [plantuml, target=activity-diagram1, format=png] .... (*) --> "Person.of()" "Person.of()" --> (*) .... ===================================================== == File: src/site/asciidoc/architecture/07_deployment_view.adoc ===================================================== [[section-deployment-view]] == Deployment View === Infrastructure Level 1 [plantuml, target=component-diagram, format=png] .... node "JVM/GraalVM" { [validation.jar] } .... ===================================================== == File: src/site/asciidoc/architecture/08_concepts.adoc ===================================================== [[section-concepts]] == Cross-cutting Concepts === Domain concepts To be done === Safety and security concepts See development concepts === Architecture and design patterns To be done. === Development concepts * Java * Maven * CheckStyle with own rules * PMD with own rules * SpotBugs with plugins * SonarQube * Unit-Tests with pitest and jacoco ===================================================== == File: src/site/asciidoc/architecture/09_architecture_decisions.adoc ===================================================== [[section-design-decisions]] == Architecture Decisions * Java - because its a better language than C++ and wide spread * Block loop logic is still within the code and not in the template * Template syntax is XML compatible but could also be used for code templates ===================================================== == File: src/site/asciidoc/architecture/10_quality_requirements.adoc ===================================================== [[section-quality-scenarios]] == Quality Requirements === Quality Tree [plantuml, target=quality-tree, format=png] .... @startmindmap * Quality tree ** TODO ** Performace efficience ** Low memory usage ** Security/Safety *** DDD Value/Entity objects *** Static code analysis *** Unit tests ** Usability *** Simple api *** Developer documentation ** Transferability *** Java virtual machine @endmindmap .... === Quality Scenarios [plantuml, target=use-case, format=png] .... :Developer: --> (use validation classes) .... ===================================================== == File: src/site/asciidoc/architecture/11_technical_risks.adoc ===================================================== [[section-technical-risks]] == Risks and Technical Debts The following risks exists at the moment: * Unknown memory consumption * Unknown performance issues * Unknown security problems ===================================================== == File: src/site/asciidoc/architecture/12_glossary.adoc ===================================================== [[section-glossary]] == Glossary [cols="e,2e" options="header"] |=== |Term |Definition |GraalVM |Graal virtual machine, successor of JVM |Java |The java programming language |JVM |Java virtual machine |DDD |Domain Driven Design |Value |Value object that is not changeable after construction |Entity |Entity object that is changeable after construction |=== ===================================================== == File: src/site/asciidoc/architecture/about-arc42.adoc ===================================================== :homepage: https://arc42.org :keywords: software-architecture, documentation, template, arc42 :numbered!: **About arc42** [role="lead"] arc42, the template for documentation of software and system architecture. Template Version {revnumber}. {revremark}, {revdate} Created, maintained and (C) by Dr. Peter Hruschka, Dr. Gernot Starke and contributors. See https://arc42.org. ===================================================== == File: src/site/asciidoc/architecture/config.adoc ===================================================== // asciidoc settings for EN (English) // ================================== :toc-title: table of contents // enable table-of-contents :toc: // where are images located? :imagesdir: ./images ===================================================== == File: src/site/asciidoc/index.adoc ===================================================== // header file for arc42-template, // including all help texts // // ==================================== // configure EN settings for asciidoc include::architecture/config.adoc[] = image:architecture/arc42-logo.png[arc42] Template :revnumber: 8.1 EN :revdate: May 2022 :revremark: (based upon AsciiDoc version) // toc-title definition MUST follow document title without blank line! :toc-title: Table of Contents //additional style for arc42 help callouts ifdef::backend-html5[] ++++ <style> .arc42help {font-size:small; width: 14px; height: 16px; overflow: hidden; position: absolute; right: 0; padding: 2px 0 3px 2px;} .arc42help::before {content: "?";} .arc42help:hover {width:auto; height: auto; z-index: 100; padding: 10px;} .arc42help:hover::before {content: "";} @media print { .arc42help {display:none;} } </style> ++++ endif::backend-html5[] include::architecture/about-arc42.adoc[] // horizontal line *** // numbering from here on :numbered: <<<< // 1. Introduction and Goals include::architecture/01_introduction_and_goals.adoc[] <<<< // 2. Architecture Constraints include::architecture/02_architecture_constraints.adoc[] ===================================================== == File: src/test/java/de/powerstat/validation/comparators/test/ComparatorEMailByDomainTests.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.comparators.test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import de.powerstat.validation.comparators.ComparatorEMailByDomain; import de.powerstat.validation.values.EMail; /** * ComparatorEMailByDomain tests. */ final class ComparatorEMailByDomainTests { /** * User1@example.com constant. */ private static final String USER1_EXAMPLE_COM = "user1@example.com"; //$NON-NLS-1$ /** * User2@example.com constant. */ private static final String USER2_EXAMPLE_COM = "user2@example.com"; //$NON-NLS-1$ /** * User1@powerstat.de */ private static final String USER1_POWERSTAT_DE = "user1@powerstat.de"; //$NON-NLS-1$ /** * Null pointer exception expected constant. */ private static final String NULL_POINTER_EXCEPTION = "Null pointer exception expected"; //$NON-NLS-1$ /** * Compare not smaller constant. */ private static final String COMPARE_NOT_SMALLER = "Compare not smaller!"; //$NON-NLS-1$ /** * Compare not greater constant. */ ===================================================== == File: src/test/java/de/powerstat/validation/comparators/test/package-info.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ /** * UnitTests for validation value class comparators. */ package de.powerstat.validation.comparators.test; ===================================================== == File: src/test/java/de/powerstat/validation/containers/test/GroupOfTests.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.containers.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.ArrayList; import java.util.Iterator; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.containers.GroupOf; import de.powerstat.validation.entities.Person; import de.powerstat.validation.values.Gender; import de.powerstat.validation.values.Lastname; /** * GroupOf tests. */ public class GroupOfTests { /** * Default constructor. */ /* default */ GroupOfTests() { super(); } /** * Constructor test. */ @Test /* default */ void testConstructor1() { final GroupOf<Person> groups = new GroupOf<>("developers"); assertAll("GroupOf constructor", () -> assertNotNull(groups, "Constructor failed!"), //$NON-NLS-1$ () -> assertEquals("developers", groups.name(), "Wrong group name") //$NON-NLS-1$ ===================================================== == File: src/test/java/de/powerstat/validation/containers/test/HistoryOfTests.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.containers.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertIterableEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.time.OffsetDateTime; import java.time.ZoneOffset; import java.util.ArrayList; import java.util.List; import java.util.NoSuchElementException; import java.util.SortedMap; import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.Test; import de.powerstat.validation.containers.HistoryOf; import de.powerstat.validation.values.Lastname; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * HistoryOf tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "CE_CLASS_ENVY"}) @SuppressWarnings("java:S2925") final class HistoryOfTests { /** * Lastname constant. */ private static final String HOFMANN = "Hofmann"; //$NON-NLS-1$ /** * Lastname constant. */ private static final String LASTNAME = "Lastname"; //$NON-NLS-1$ /** * Test has code constant. */ ===================================================== == File: src/test/java/de/powerstat/validation/containers/test/NTuple15Tests.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.containers.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import de.powerstat.validation.containers.NTuple15; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * NTuple15 tests. */ @SuppressFBWarnings({"CE_CLASS_ENVY", "RV_NEGATING_RESULT_OF_COMPARETO", "SPP_USE_ZERO_WITH_COMPARATOR", "EC_NULL_ARG"}) final class NTuple15Tests { /** * Test equals constant. */ private static final String TEST_EQUALS = "testEquals"; //$NON-NLS-1$ /** * Test compare to constant. */ private static final String TEST_COMPARE_TO = "testCompareTo"; //$NON-NLS-1$ /** * Tuple is equal constant. */ private static final String TUPLE12_IS_EQUAL = "tuple12 is equal"; //$NON-NLS-1$ /** * Tuple is equal constant. */ private static final String TUPLE13_IS_EQUAL = "tuple13 is equal"; //$NON-NLS-1$ /** * Tuple is equal constant. */ private static final String TUPLE14_IS_EQUAL = "tuple14 is equal"; //$NON-NLS-1$ /** ===================================================== == File: src/test/java/de/powerstat/validation/containers/test/NTuple16Tests.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.containers.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import de.powerstat.validation.containers.NTuple16; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * NTuple16 tests. */ @SuppressFBWarnings({"CE_CLASS_ENVY", "RV_NEGATING_RESULT_OF_COMPARETO", "SPP_USE_ZERO_WITH_COMPARATOR", "EC_NULL_ARG"}) final class NTuple16Tests { /** * Test equals constant. */ private static final String TEST_EQUALS = "testEquals"; //$NON-NLS-1$ /** * Test compare to constant. */ private static final String TEST_COMPARE_TO = "testCompareTo"; //$NON-NLS-1$ /** * Tuple is equal constant. */ private static final String TUPLE12_IS_EQUAL = "tuple12 is equal"; //$NON-NLS-1$ /** * Tuple is equal constant. */ private static final String TUPLE13_IS_EQUAL = "tuple13 is equal"; //$NON-NLS-1$ /** * Tuple is equal constant. */ private static final String TUPLE14_IS_EQUAL = "tuple14 is equal"; //$NON-NLS-1$ /** ===================================================== == File: src/test/java/de/powerstat/validation/containers/test/NTuple2Tests.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.containers.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import de.powerstat.validation.containers.NTuple2; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * NTuple2 tests. */ @SuppressFBWarnings({"CE_CLASS_ENVY", "RV_NEGATING_RESULT_OF_COMPARETO", "SPP_USE_ZERO_WITH_COMPARATOR", "EC_NULL_ARG"}) final class NTuple2Tests { /** * Default constructor. */ /* default */ NTuple2Tests() { super(); } /** * Factory test. */ @Test /* default */ void testOfInt() { final NTuple2<Integer, Integer> tuple = NTuple2.of(Integer.valueOf(1), Integer.valueOf(4711)); assertAll("testGetValue", //$NON-NLS-1$ () -> assertEquals(1, tuple.t1Value().intValue(), "t1 not as expected"), //$NON-NLS-1$ () -> assertEquals(4711, tuple.t2Value().intValue(), "t2 not as expected") //$NON-NLS-1$ ); } /** * Test hash code. */ ===================================================== == File: src/test/java/de/powerstat/validation/containers/test/NTuple3Tests.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.containers.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import de.powerstat.validation.containers.NTuple3; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * NTuple3 tests. */ @SuppressFBWarnings({"CE_CLASS_ENVY", "RV_NEGATING_RESULT_OF_COMPARETO", "SPP_USE_ZERO_WITH_COMPARATOR", "EC_NULL_ARG"}) final class NTuple3Tests { /** * Test equals constant. */ private static final String TEST_EQUALS = "testEquals"; //$NON-NLS-1$ /** * Test compare to constant. */ private static final String TEST_COMPARE_TO = "testCompareTo"; //$NON-NLS-1$ /** * Suppress sonarqube warning. */ private static final String JAVA_S5785 = "java:S5785"; //$NON-NLS-1$ /** * Default constructor. */ /* default */ NTuple3Tests() { super(); } /** ===================================================== == File: src/test/java/de/powerstat/validation/containers/test/NTuple4Tests.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.containers.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import de.powerstat.validation.containers.NTuple4; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * NTuple4 tests. */ @SuppressFBWarnings({"CE_CLASS_ENVY", "RV_NEGATING_RESULT_OF_COMPARETO", "SPP_USE_ZERO_WITH_COMPARATOR", "EC_NULL_ARG"}) final class NTuple4Tests { /** * Test equals constant. */ private static final String TEST_EQUALS = "testEquals"; //$NON-NLS-1$ /** * Test compare to constant. */ private static final String TEST_COMPARE_TO = "testCompareTo"; //$NON-NLS-1$ /** * tuple is equal constant. */ private static final String TUPLE12_IS_EQUAL = "tuple12 is equal"; //$NON-NLS-1$ /** * tuple is equal constant. */ private static final String TUPLE13_IS_EQUAL = "tuple13 is equal"; //$NON-NLS-1$ /** * Suppress sonarqube warning. */ private static final String JAVA_S5785 = "java:S5785"; //$NON-NLS-1$ ===================================================== == File: src/test/java/de/powerstat/validation/containers/test/NTuple9Tests.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.containers.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import de.powerstat.validation.containers.NTuple9; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * NTuple9 tests. */ @SuppressFBWarnings({"CE_CLASS_ENVY", "RV_NEGATING_RESULT_OF_COMPARETO", "SPP_USE_ZERO_WITH_COMPARATOR", "EC_NULL_ARG"}) final class NTuple9Tests { /** * Test equals constant. */ private static final String TEST_EQUALS = "testEquals"; //$NON-NLS-1$ /** * Test compare to constant. */ private static final String TEST_COMPARE_TO = "testCompareTo"; //$NON-NLS-1$ /** * Tuple is equal constant. */ private static final String TUPLE12_IS_EQUAL = "tuple12 is equal"; //$NON-NLS-1$ /** * Tuple is equal constant. */ private static final String TUPLE13_IS_EQUAL = "tuple13 is equal"; //$NON-NLS-1$ /** * Tuple is equal constant. */ private static final String TUPLE14_IS_EQUAL = "tuple14 is equal"; //$NON-NLS-1$ /** ===================================================== == File: src/test/java/de/powerstat/validation/containers/test/package-info.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ /** * UnitTests for validation values containers classes. */ package de.powerstat.validation.containers.test; ===================================================== == File: src/test/java/de/powerstat/validation/entities/test/package-info.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ /** * UnitTests for validation entity classes. */ package de.powerstat.validation.entities.test; ===================================================== == File: src/test/java/de/powerstat/validation/entities/test/PersonTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.entities.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.time.OffsetDateTime; import java.time.ZoneOffset; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import org.junit.jupiter.api.Test; import de.powerstat.validation.entities.Person; import de.powerstat.validation.values.BloodGroup; import de.powerstat.validation.values.Firstname; import de.powerstat.validation.values.Gender; import de.powerstat.validation.values.Lastname; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Person tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) @SuppressWarnings("java:S2925") final class PersonTests { /** * Lastname constant. */ private static final String HOFMANN = "Hofmann"; //$NON-NLS-1$ /** * Lastname constant. */ private static final String LASTNAME = "Lastname"; //$NON-NLS-1$ /** * Firstname constant. ===================================================== == File: src/test/java/de/powerstat/validation/test/package-info.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ /** * UnitTests for validation utilities. */ package de.powerstat.validation.test; ===================================================== == File: src/test/java/de/powerstat/validation/test/ValidationUtilsTests.java ===================================================== /* * Copyright (C) 2019-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.List; import org.junit.jupiter.api.Test; import de.powerstat.validation.ValidationUtils; /** * Validation utility tests. */ final class ValidationUtilsTests { /* * * Logger. */ // private static final Logger LOGGER = LogManager.getLogger(ValidationUtilsTests.class); /** * Illegal argument exception expected constant. */ private static final String ILLEGAL_ARGUMENT_EXCEPTION = "Illegal argument exception expected"; //$NON-NLS-1$ /** * Url path not as expected constant. */ private static final String URL_PATH_NOT_AS_EXPECTED = "Url path not as expected!"; //$NON-NLS-1$ /** * Wrong hostname constant. */ private static final String WRONG_HOSTNAME = "Wrong hostname!"; //$NON-NLS-1$ /** * Wrong port constant. */ private static final String WRONG_PORT = "Wrong port!"; //$NON-NLS-1$ /** * ValidationUtils path constant. */ ===================================================== == File: src/test/java/de/powerstat/validation/values/impl/test/IBANVerifierTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.impl.test; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.Test; import de.powerstat.validation.values.impl.IBANVerifier; /** * IBAN verifier tests. */ final class IBANVerifierTests { /** * Illegal argument exception expected constant. */ private static final String ILLEGAL_ARGUMENT_EXCEPTION = "Illegal argument exception expected"; //$NON-NLS-1$ /** * German IBAN regexp. */ private static final String IBAN_DE_REGEXP = "^DE[0-9]{2}[0-9]{18}$"; //$NON-NLS-1$ /** * Default Constructor. */ /* default */ IBANVerifierTests() { super(); } /** * Test constructor with illegal length. */ @Test /* default */ void testConstructor1() { assertThrows(IllegalArgumentException.class, () -> { IBANVerifier.of(14, IBANVerifierTests.IBAN_DE_REGEXP); }, IBANVerifierTests.ILLEGAL_ARGUMENT_EXCEPTION ); ===================================================== == File: src/test/java/de/powerstat/validation/values/impl/test/package-info.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ /** * UnitTests for validation implementation classes. */ package de.powerstat.validation.values.impl.test; ===================================================== == File: src/test/java/de/powerstat/validation/values/strategies/test/package-info.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ /** * UnitTests for validation strategy classes. */ package de.powerstat.validation.values.strategies.test; ===================================================== == File: src/test/java/de/powerstat/validation/values/strategies/test/PasswordConfigurableStrategyTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.strategies.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.Test; import de.powerstat.validation.values.strategies.IPasswordStrategy; import de.powerstat.validation.values.strategies.PasswordConfigurableStrategy; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Password configurable strategy tests. */ @SuppressFBWarnings("PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS") final class PasswordConfigurableStrategyTests { /** * Password pattern. */ private static final String PWD_PATTERN = "^[@./_0-9a-zA-Z-]+$"; /** * Password. */ private static final String PWD_1234567890 = "1234567890"; /** * Clean strategy not as expected. */ private static final String CLEAN_STRATEGY_NOT_AS_EXPECTED = "cleanStrategy not as expected"; /** * Illegal argument exception expected constant. */ private static final String ILLEGAL_ARGUMENT_EXCEPTION = "Illegal argument exception expected"; //$NON-NLS-1$ /** * Dummy value 1. */ private static final String DUMMY1 = "1111111111"; //$NON-NLS-1$ /** ===================================================== == File: src/test/java/de/powerstat/validation/values/strategies/test/UsernameConfigurableStrategyTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.strategies.test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import de.powerstat.validation.values.strategies.IUsernameStrategy; import de.powerstat.validation.values.strategies.UsernameConfigurableStrategy; import de.powerstat.validation.values.strategies.UsernameConfigurableStrategy.HandleEMail; /** * Username configurable strategy tests. */ final class UsernameConfigurableStrategyTests { /** * Match pattern 1. */ private static final String PATTERN1 = "^[@./_0-9a-zA-Z-]+$"; //$NON-NLS-1$ /** * Match pattern 2. */ private static final String PATTERN2 = "^[@./_0-9a-zA-Z-]*$"; //$NON-NLS-1$ /** * Username constant. */ private static final String USERNAME = "username"; //$NON-NLS-1$ /** * EMail address constant. */ private static final String USERNAME_EXAMPLE_COM = "username@example.com"; //$NON-NLS-1$ /** * Illegal argument exception expected constant. */ private static final String ILLEGAL_ARGUMENT_EXCEPTION = "Illegal argument exception expected"; //$NON-NLS-1$ /** ===================================================== == File: src/test/java/de/powerstat/validation/values/test/AddressTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import de.powerstat.validation.values.Address; import de.powerstat.validation.values.BFPONumber; import de.powerstat.validation.values.Block; import de.powerstat.validation.values.BuildingName; import de.powerstat.validation.values.BuildingNr; import de.powerstat.validation.values.City; import de.powerstat.validation.values.Country; import de.powerstat.validation.values.Department; import de.powerstat.validation.values.District; import de.powerstat.validation.values.Lines; import de.powerstat.validation.values.Neighbourhood; import de.powerstat.validation.values.PoBoxNumber; import de.powerstat.validation.values.PostalCode; import de.powerstat.validation.values.Province; import de.powerstat.validation.values.Street; import de.powerstat.validation.values.SubBuilding; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Address tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class AddressTests { /** * Line break unix. */ private static final String LINEBREAK_UNIX = "\n"; //$NON-NLS-1$ /** * Line break windows. */ private static final String LINEBREAK_WIN = "\r\n"; //$NON-NLS-1$ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/AddressWithWGS84PositionTests.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import de.powerstat.validation.values.AddressWithWGS84Position; import de.powerstat.validation.values.BFPONumber; import de.powerstat.validation.values.Block; import de.powerstat.validation.values.BuildingName; import de.powerstat.validation.values.BuildingNr; import de.powerstat.validation.values.City; import de.powerstat.validation.values.Country; import de.powerstat.validation.values.Department; import de.powerstat.validation.values.District; import de.powerstat.validation.values.Lines; import de.powerstat.validation.values.Neighbourhood; import de.powerstat.validation.values.PoBoxNumber; import de.powerstat.validation.values.PostalCode; import de.powerstat.validation.values.Province; import de.powerstat.validation.values.Street; import de.powerstat.validation.values.SubBuilding; import de.powerstat.validation.values.WGS84Position; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * AddressWithWGS84Position tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class AddressWithWGS84PositionTests { /** * Line break unix. */ private static final String LINEBREAK_UNIX = "\n"; //$NON-NLS-1$ /** * Line break windows. */ private static final String LINEBREAK_WIN = "\r\n"; //$NON-NLS-1$ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/BFPONumberTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.BFPONumber; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * BFPONumber tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class BFPONumberTests { /** * Not a BFPONumber constant. */ private static final String NOT_A_BFPO_NUMBER = "Not a BFPONumber!"; //$NON-NLS-1$ /** * 1 constant. */ private static final String ONE = "1"; //$NON-NLS-1$ /** * Default constructor. */ /* default */ BFPONumberTests() { super(); } /** * Factory string test. */ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/BICTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.BIC; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * BIC Tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class BICTests { /** * Illegal argument exception expected. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ /** * BIC not as expected. */ private static final String BIC_NOT_AS_EXPECTED = "BIC not as expected"; //$NON-NLS-1$ /** * BIC for tests. */ private static final String BIC_BELADEBEXXX = "BELADEBEXXX"; //$NON-NLS-1$ /** * BIC for tests. */ private static final String BIC_RZTIAT22263 = "RZTIAT22263"; //$NON-NLS-1$ /** * Default constructor. ===================================================== == File: src/test/java/de/powerstat/validation/values/test/BlockTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Block; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Block tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class BlockTests { /** * Block a. */ private static final String BLOCKA = "A"; //$NON-NLS-1$ /** * Block b. */ private static final String BLOCKB = "B"; //$NON-NLS-1$ /** * Illegal argument exception expected. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ /** * Block not as expected. */ private static final String BLOCK_NOT_AS_EXPECTED = "Block not as expected"; //$NON-NLS-1$ /** * Default constructor. ===================================================== == File: src/test/java/de/powerstat/validation/values/test/BloodGroupTests.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import de.powerstat.validation.values.BloodGroup; /** * Gender tests. */ final class BloodGroupTests { /** * Compatible blood groups. */ private static final String BG_ABPABP_OK = "AB+ with AB+ should be ok"; //$NON-NLS-1$ /** * Compatible blood groups. */ private static final String BG_ABNABP_OK = "AB- with AB+ should be ok"; //$NON-NLS-1$ /** * Compatible blood groups. */ private static final String BG_ABNABN_OK = "AB- with AB- should be ok"; //$NON-NLS-1$ /** * Compatible blood groups. */ private static final String BG_APAP_OK = "A+ with A+ should be ok"; //$NON-NLS-1$ /** * Compatible blood groups. */ private static final String BG_ANAN_OK = "A- with A- should be ok"; //$NON-NLS-1$ /** * Compatible blood groups. */ private static final String BG_BPBP_OK = "B+ with B+ should be ok"; //$NON-NLS-1$ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/BuildingNameTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.BuildingName; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Building name tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class BuildingNameTests { /** * City hall. */ private static final String RATHAUS = "Rathaus"; //$NON-NLS-1$ /** * Stadtwaage. */ private static final String STADTWAAGE = "Stadtwaage"; //$NON-NLS-1$ /** * Illegal argument exception expected. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ /** * Building name not as expected. */ private static final String BUILDING_NAME_NOT_AS_EXPECTED = "BuildingName not as expected"; //$NON-NLS-1$ /** * Default constructor. ===================================================== == File: src/test/java/de/powerstat/validation/values/test/BuildingNrTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.BuildingNr; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Building number tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "CE_CLASS_ENVY"}) final class BuildingNrTests { /** * Test compare to. */ private static final String TEST_COMPARE_TO = "testCompareTo"; //$NON-NLS-1$ /** * Building nr 23. */ private static final String BUILDINGNR23 = "23"; //$NON-NLS-1$ /** * Building nr 23 1/4. */ private static final String BUILDINGNR23_1_4 = "23 1/4"; //$NON-NLS-1$ /** * Building nr 42. */ private static final String BUILDINGNR42 = "42"; //$NON-NLS-1$ /** * Illegal argument exception expected. */ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/CalendarSystemsTests.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; import de.powerstat.validation.values.CalendarSystems; /** * Calendar systems tests. */ final class CalendarSystemsTests { /** * Julian action not as expected constant. */ private static final String JULIAN_ACTION_NOT_AS_EXPECTED = "Julian action not as expected"; /** * Default constructor. */ /* default */ CalendarSystemsTests() { super(); } /** * Factory string test. */ @Test /* default */ void testFactory1() { assertEquals(0, CalendarSystems.of("JULIAN").getAction(), JULIAN_ACTION_NOT_AS_EXPECTED); //$NON-NLS-1$ } /** * Test getAction of CalendarSystems. */ @Test /* default */ void testGetAction() { ===================================================== == File: src/test/java/de/powerstat/validation/values/test/CityTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.City; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * City tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class CityTests { /** * Bremen. */ private static final String BREMEN = "Bremen"; //$NON-NLS-1$ /** * Hannover. */ private static final String HANNOVER = "Hannover"; //$NON-NLS-1$ /** * Illegal argument exception expected. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ /** * City not as expected. */ private static final String CITY_NOT_AS_EXPECTED = "City not as expected"; //$NON-NLS-1$ /** * Default constructor. ===================================================== == File: src/test/java/de/powerstat/validation/values/test/CountryTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Country; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Country tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class CountryTests { /** * FR france. */ private static final String FR = "FR"; //$NON-NLS-1$ /** * DE germany. */ private static final String DE = "DE"; //$NON-NLS-1$ /** * Illegal argument exception expected. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ /** * Country code not as expected. */ private static final String COUNTRY_CODE_NOT_AS_EXPECTED = "Country code not as expected"; //$NON-NLS-1$ /** * Default constructor. ===================================================== == File: src/test/java/de/powerstat/validation/values/test/CurrencyTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Currency; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Currency tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class CurrencyTests { /** * EURO. */ private static final String EUR = "EUR"; //$NON-NLS-1$ /** * USD. */ private static final String USD = "USD"; //$NON-NLS-1$ /** * Illegal argument exception expected. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ /** * Currency code not as expected. */ private static final String CURRENCY_CODE_NOT_AS_EXPECTED = "Currency code not as expected"; //$NON-NLS-1$ /** * Default constructor. ===================================================== == File: src/test/java/de/powerstat/validation/values/test/DaysTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Days; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Days tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class DaysTests { /** * Not a days constant. */ private static final String NOT_A_DAYS = "Not a days!"; //$NON-NLS-1$ /** * Result not as expected constant. */ private static final String RESULT_NOT_AS_EXPECTED = "Result not as expected"; //$NON-NLS-1$ /** * Arithmetic exception expected constant. */ private static final String ARITHMETIC_EXCEPTION_EXPECTED = "Arithmetic exception expected"; //$NON-NLS-1$ /** * Default constructor. */ /* default */ DaysTests() { super(); } ===================================================== == File: src/test/java/de/powerstat/validation/values/test/DayTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Day; import de.powerstat.validation.values.Days; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Day tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class DayTests { /** * Result not as expected constant. */ private static final String RESULT_NOT_AS_EXPECTED = "Result not as expected"; //$NON-NLS-1$ /** * Arithmetic exception expected contant. */ private static final String ARITHMETIC_EXCEPTION_EXPECTED = "Arithmetic exception expected"; //$NON-NLS-1$ /** * 10 constant. */ private static final String TEN = "10"; //$NON-NLS-1$ /** * Not a day constant. */ private static final String NOT_A_DAY = "Not a day!"; //$NON-NLS-1$ /** ===================================================== == File: src/test/java/de/powerstat/validation/values/test/DepartmentTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Department; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Department tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class DepartmentTests { /** * Reasearch. */ private static final String RESEARCH = "Research"; //$NON-NLS-1$ /** * Telecomunication. */ private static final String TELECOMUNICATION = "Telecomunication"; //$NON-NLS-1$ /** * Illegal argument exception expected. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ /** * Department not as expected. */ private static final String DEPARTMENT_NOT_AS_EXPECTED = "Department not as expected"; //$NON-NLS-1$ /** * Default constructor. ===================================================== == File: src/test/java/de/powerstat/validation/values/test/DisplayAspectRatioTests.java ===================================================== /* * Copyright (C) 2021-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import de.powerstat.validation.values.DisplayAspectRatio; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Display aspect ratio tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class DisplayAspectRatioTests { /** * Test aspect ration constant. */ private static final String TEST_ASPECT_RATIO = "testAspectRatio"; //$NON-NLS-1$ /** * 1:1 constant. */ private static final String ONE_TO_ONE = "1:1"; //$NON-NLS-1$ /** * Aspect ratio not as expected constant. */ private static final String ASPECT_RATIO_NOT_AS_EXPECTED = "aspect ratio not as expected"; //$NON-NLS-1$ /** * Index out of bounds exception comnstant. */ private static final String INDEX_OUT_OF_BOUNDS_EXPECTED = "Index out of bounds exception expected"; //$NON-NLS-1$ /** * Default constructor. */ /* default */ DisplayAspectRatioTests() ===================================================== == File: src/test/java/de/powerstat/validation/values/test/DistrictTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.District; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * District tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class DistrictTests { /** * District abc. */ private static final String DISTRICTABC = "abc"; //$NON-NLS-1$ /** * District 9. */ private static final String DISTRICT9 = "9"; //$NON-NLS-1$ /** * Illegal argument exception expected. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ /** * District not as expected. */ private static final String DISTRICT_NOT_AS_EXPECTED = "District not as expected"; //$NON-NLS-1$ /** * Default constructor. ===================================================== == File: src/test/java/de/powerstat/validation/values/test/EMailTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.EMail; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * EMail tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class EMailTests { /** * EMail address for testing user1@example.com. */ private static final String EMAIL_USER1_AT_EXAMPLE_COM = "user1@example.com"; //$NON-NLS-1$ /** * user@example.com email constant. */ private static final String USER_EXAMPLE_COM = "user@example.com"; //$NON-NLS-1$ /** * user2@example.com. */ private static final String USER2_EXAMPLE_COM = "user2@example.com"; //$NON-NLS-1$ /** * example.com. */ private static final String EXAMPLE_COM = "example.com"; //$NON-NLS-1$ /** * EMail not as expected constant. */ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/FirstnameTests.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Firstname; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Firstname tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class FirstnameTests { /** * Firstname. */ private static final String FIRSTNAME = "firstname"; //$NON-NLS-1$ /** * Firstname z. */ private static final String FIRSTNAMEZ = "firstnamez"; //$NON-NLS-1$ /** * Illegal argument exception expected. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ /** * Firstname not as expected. */ private static final String FIRSTNAME_NOT_AS_EXPECTED = "Firstname not as expected"; //$NON-NLS-1$ /** * Default constructor. ===================================================== == File: src/test/java/de/powerstat/validation/values/test/GenderTests.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; import de.powerstat.validation.values.Gender; /** * Gender tests. */ final class GenderTests { /** * Unknown constant. */ private static final String UNKNOWN = "UNKNOWN"; /** * Unknown action not as expected contant. */ private static final String UNKNOWN_ACTION_NOT_AS_EXPECTED = "UNKNOWN action not as expected"; /** * Default constructor. */ /* default */ GenderTests() { super(); } /** * Factory string test. */ @Test /* default */ void testFactory1() { assertEquals(0, Gender.of(UNKNOWN).getAction(), UNKNOWN_ACTION_NOT_AS_EXPECTED); } /** ===================================================== == File: src/test/java/de/powerstat/validation/values/test/GregorianCalendarTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Country; import de.powerstat.validation.values.GregorianCalendar; import de.powerstat.validation.values.Month; import de.powerstat.validation.values.Year; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Gregorian calendar tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class GregorianCalendarTests { /** * Test is leap year constant. */ private static final String TEST_IS_LEAP_YEAR = "testIsLeapYear"; //$NON-NLS-1$ /** * DE germany. */ private static final String DE = "DE"; //$NON-NLS-1$ /** * IT italy. */ private static final String IT = "IT"; //$NON-NLS-1$ /** * RU russia. */ private static final String RU = "RU"; //$NON-NLS-1$ /** ===================================================== == File: src/test/java/de/powerstat/validation/values/test/GregorianDateTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Country; import de.powerstat.validation.values.Day; import de.powerstat.validation.values.GregorianCalendar; import de.powerstat.validation.values.GregorianDate; import de.powerstat.validation.values.Month; import de.powerstat.validation.values.Year; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Gregorian date tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "CLI_CONSTANT_LIST_INDEX", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class GregorianDateTests { /** * IT italy. */ private static final String IT = "IT"; //$NON-NLS-1$ /** * Test comapre to constant. */ private static final String TEST_COMPARE_TO = "testCompareTo"; //$NON-NLS-1$ /** * Date not as expected constant. */ private static final String DATE_NOT_AS_EXPECTED = "Date not as expected"; //$NON-NLS-1$ /** * Date separator constant. */ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/HostnameTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Hostname; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Hostname tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class HostnameTests { /** * Private ip address 192.168.1.1. */ private static final String PRIVATE_IP_192_168_1_1 = "192.168.1.1"; //$NON-NLS-1$ /** * Private ip address 192.168.1.2. */ private static final String PRIVATE_IP_192_168_1_2 = "192.168.1.2"; //$NON-NLS-1$ /** * IPV6 FD. */ private static final String FD00 = "fd00:0000:0000:0000:0000:0000:0000:0000"; //$NON-NLS-1$ /** * www.powerstat.de constant. */ private static final String WWW_POWERSTAT_DE = "www.powerstat.de"; //$NON-NLS-1$ /** * nonexistant.example.com. */ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/HoursTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Hours; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Hours tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class HoursTests { /** * Not a hours constant. */ private static final String NOT_A_HOURS = "Not a hours!"; //$NON-NLS-1$ /** * Result nor as expected constant. */ private static final String RESULT_NOT_AS_EXPECTED = "Result not as expected"; //$NON-NLS-1$ /** * Arithmetic exception expected constant. */ private static final String ARITHMETIC_EXCEPTION_EXPECTED = "Arithmetic exception expected"; //$NON-NLS-1$ /** * Default constructor. */ /* default */ HoursTests() { super(); } ===================================================== == File: src/test/java/de/powerstat/validation/values/test/HourTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Hour; import de.powerstat.validation.values.Hours; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Hour tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class HourTests { /** * Not a hour constant. */ private static final String NOT_A_HOUR = "Not a hour!"; //$NON-NLS-1$ /** * Result nor as expected constant. */ private static final String RESULT_NOT_AS_EXPECTED = "Result not as expected"; //$NON-NLS-1$ /** * Arithmetic exception expected constant. */ private static final String ARITHMETIC_EXCEPTION_EXPECTED = "Arithmetic exception expected"; //$NON-NLS-1$ /** * Default constructor. */ /* default */ HourTests() { super(); ===================================================== == File: src/test/java/de/powerstat/validation/values/test/IBANTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.IBAN; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * IBAN tests. * * TODO Human formatted output */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class IBANTests { /** * Test iban. */ private static final String IBAN_DE07123412341234123412 = "DE07123412341234123412"; //$NON-NLS-1$ /** * Test iban. */ private static final String IBAN_DE68210501700012345678 = "DE68210501700012345678"; //$NON-NLS-1$ /** * IBAN not as expected constant. */ private static final String IBAN_NOT_AS_EXPECTED = "IBAN not as expected"; //$NON-NLS-1$ /** * Illegal argument exception expected constant. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/IPV4AddressTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.IPV4Address; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Tests for IP V4 address class. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class IPV4AddressTests { /** * Private ip address 192.168.1.1. */ private static final String PRIVATE_IP_192_168_1_1 = "192.168.1.1"; //$NON-NLS-1$ /** * Private ip address 192.168.1.2. */ private static final String PRIVATE_IP_192_168_1_2 = "192.168.1.2"; //$NON-NLS-1$ /** * Error message: address is not private. */ private static final String ADDRESS_IS_NOT_PRIVATE = "Address is not private"; //$NON-NLS-1$ /** * Error message: address is not special. */ private static final String ADDRESS_IS_NOT_SPECIAL = "Address is not special"; //$NON-NLS-1$ /** * Address is not public. */ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/IPV4MaskTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import de.powerstat.validation.values.IPV4Mask; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * IP V4 mask tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class IPV4MaskTests { /** * IP address mask 255.0.0.0. */ private static final String IPMASK_255_0_0_0 = "255.0.0.0"; //$NON-NLS-1$ /** * IP address mask 255.255.0.0. */ private static final String IPMASK_255_255_0_0 = "255.255.0.0"; //$NON-NLS-1$ /** * IP address mask 255.255.255.0. */ private static final String IPMASK_255_255_255_0 = "255.255.255.0"; //$NON-NLS-1$ /** * IP address mask 255.255.255.255. */ private static final String IP255 = "255.255.255.255"; //$NON-NLS-1$ /** * P address mask 0.0.0.0. */ private static final String IP_ZERO = "0.0.0.0"; //$NON-NLS-1$ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/IPV6AddressTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.IPV6Address; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * IP V6 tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class IPV6AddressTests { /** * IP V6 test address. */ private static final String IPV6_FD00 = "fd00::"; //$NON-NLS-1$ /** * IP V6 test address. */ private static final String FD00_0000 = "fd00:0000:0000:0000:0000:0000:0000:0000"; //$NON-NLS-1$ /** * IP V6 test address. */ private static final String FD00_1 = "fd00::1"; //$NON-NLS-1$ /** * Illegal argument exception expected constant. */ private static final String ILLEGAL_ARGUMENT_EXCEPTION = "Illegal argument exception expected"; //$NON-NLS-1$ /** * Address is not public constant. */ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/IPV6MaskTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import de.powerstat.validation.values.IPV6Mask; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * IP V6 mask tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class IPV6MaskTests { /** * Length is not equal constant. */ private static final String LENGTH_IS_NOT_EQUAL = "length is not equal"; //$NON-NLS-1$ /** * Index out of bounds exception expected constant. */ private static final String INDEX_OUT_OF_BOUNDS = "Index out of bounds exception expected"; //$NON-NLS-1$ /** * Constructor success constant. */ private static final String CONSTRUCTOR_SUCCESS = "constructorSuccess"; //$NON-NLS-1$ /** * Default constructor. */ /* default */ IPV6MaskTests() { super(); } ===================================================== == File: src/test/java/de/powerstat/validation/values/test/LanguageTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Language; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Language tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class LanguageTests { /** * FR france. */ private static final String FR = "fr"; //$NON-NLS-1$ /** * DE germany. */ private static final String DE = "de"; //$NON-NLS-1$ /** * Illegal argument exception expected constant. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ /** * Language code not as expected constant. */ private static final String LANGUAGE_CODE_NOT_AS_EXPECTED = "Language code not as expected"; //$NON-NLS-1$ /** * Default constructor. ===================================================== == File: src/test/java/de/powerstat/validation/values/test/LastnameTests.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Lastname; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Lastname tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class LastnameTests { /** * Lastname. */ private static final String LASTNAME = "lastname"; //$NON-NLS-1$ /** * Lastname z. */ private static final String LASTNAMEZ = "lastnamez"; //$NON-NLS-1$ /** * Illegal argument exception expected constant. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ /** * Lastname not as expected constant. */ private static final String LASTNAME_NOT_AS_EXPECTED = "Lastname not as expected"; //$NON-NLS-1$ /** * Default constructor. ===================================================== == File: src/test/java/de/powerstat/validation/values/test/LinesTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Lines; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Lines tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class LinesTests { /** * Example 1. */ private static final String EXAMPLE1 = "Example1"; //$NON-NLS-1$ /** * Example 2. */ private static final String EXAMPLE2 = "Example2"; //$NON-NLS-1$ /** * Illegal argument exception expected constant. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ /** * Lines not as expected constant. */ private static final String LINES_NOT_AS_EXPECTED = "Lines not as expected"; //$NON-NLS-1$ /** * Default constructor. ===================================================== == File: src/test/java/de/powerstat/validation/values/test/MACAddressTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.MACAddress; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * MAC address tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class MACAddressTests { /** * MAC address 00:00:00:00:00:00. */ private static final String MAC_00_00_00_00_00_00 = "00:00:00:00:00:00"; //$NON-NLS-1$ /** * MAC address 00-00-00-00-00-00. */ private static final String MACM_00_00_00_00_00_00 = "00-00-00-00-00-00"; //$NON-NLS-1$ /** * Mac address. */ private static final String MAC_ZERO = "000000000000"; //$NON-NLS-1$ /** * Mac address. */ private static final String MAC_ONE = "00:00:00:00:00:01"; //$NON-NLS-1$ /** * Separator. ===================================================== == File: src/test/java/de/powerstat/validation/values/test/MillisecondsTests.java ===================================================== /* * Copyright (C) 2021-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Milliseconds; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Milliseconds tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class MillisecondsTests { /** * Not milliseconds constant. */ private static final String NOT_MILLISECONDS = "Not milliseconds!"; //$NON-NLS-1$ /** * Result nor as expected constant. */ private static final String RESULT_NOT_AS_EXPECTED = "Result not as expected"; //$NON-NLS-1$ /** * Arithmetic exception expected constant. */ private static final String ARITHMETIC_EXCEPTION_EXPECTED = "Arithmetic exception expected"; //$NON-NLS-1$ /** * Default constructor. */ /* default */ MillisecondsTests() { super(); } ===================================================== == File: src/test/java/de/powerstat/validation/values/test/MillisecondTests.java ===================================================== /* * Copyright (C) 2021-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Millisecond; import de.powerstat.validation.values.Milliseconds; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Millisecond tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class MillisecondTests { /** * Not millisecond constant. */ private static final String NOT_MILLISECOND = "Not millisecond!"; //$NON-NLS-1$ /** * Result not as expected constant. */ private static final String RESULT_NOT_AS_EXPECTED = "Result not as expected"; //$NON-NLS-1$ /** * Arithmetic exception expected constant. */ private static final String ARITHMETIC_EXCEPTION_EXPECTED = "Arithmetic exception expected"; //$NON-NLS-1$ /** * Default constructor. */ /* default */ MillisecondTests() { super(); ===================================================== == File: src/test/java/de/powerstat/validation/values/test/MinutesTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Minutes; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Minutes tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class MinutesTests { /** * Not a minutes constant. */ private static final String NOT_A_MINUTES = "Not a minutes!"; //$NON-NLS-1$ /** * Result not as expected constant. */ private static final String RESULT_NOT_AS_EXPECTED = "Result not as expected"; //$NON-NLS-1$ /** * Arithmetic exception expected constant. */ private static final String ARITHMETIC_EXCEPTION_EXPECTED = "Arithmetic exception expected"; //$NON-NLS-1$ /** * Default constructor. */ /* default */ MinutesTests() { super(); } ===================================================== == File: src/test/java/de/powerstat/validation/values/test/MinuteTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Minute; import de.powerstat.validation.values.Minutes; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Minute tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class MinuteTests { /** * Not a minute constant. */ private static final String NOT_A_MINUTE = "Not a minute!"; //$NON-NLS-1$ /** * Result nor as expected constant. */ private static final String RESULT_NOT_AS_EXPECTED = "Result not as expected"; //$NON-NLS-1$ /** * Arithmetic exception expected constant. */ private static final String ARITHMETIC_EXCEPTION_EXPECTED = "Arithmetic exception expected"; //$NON-NLS-1$ /** * Default constructor. */ /* default */ MinuteTests() { super(); ===================================================== == File: src/test/java/de/powerstat/validation/values/test/MonthDayTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import de.powerstat.validation.values.Day; import de.powerstat.validation.values.Month; import de.powerstat.validation.values.MonthDay; import de.powerstat.validation.values.Months; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Month day tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class MonthDayTests { /** * Month not as expected constant. */ private static final String MONTH_NOT_AS_EXPECTED = "Month not as expected"; /** * Day not as expected constant. */ private static final String DAY_NOT_AS_EXPECTED = "Day not as expected"; /** * Day month constant. */ private static final String DAYMONTH_10_13 = "10-13"; /** * Result not as expected constant. */ private static final String RESULT_NOT_AS_EXPECTED = "result not as expected"; /** * Test of constant. ===================================================== == File: src/test/java/de/powerstat/validation/values/test/MonthsTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Months; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Months tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class MonthsTests { /** * Not a months constant. */ private static final String NOT_A_MONTHS = "Not a months!"; //$NON-NLS-1$ /** * Result not as expected constant. */ private static final String RESULT_NOT_AS_EXPECTED = "Result not as expected"; //$NON-NLS-1$ /** * Arithmetic exception expected constant. */ private static final String ARITHMETIC_EXCEPTION_EXPECTED = "Arithmetic exception expected"; //$NON-NLS-1$ /** * Default constructor. */ /* default */ MonthsTests() { super(); } ===================================================== == File: src/test/java/de/powerstat/validation/values/test/MonthTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Month; import de.powerstat.validation.values.Months; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Month tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class MonthTests { /** * Result not as expected constant. */ private static final String RESULT_NOT_AS_EXPECTED = "Result not as expected"; //$NON-NLS-1$ /** * Arithmetic exception expected constant. */ private static final String ARITHMETIC_EXCEPTION_EXPECTED = "Arithmetic exception expected"; //$NON-NLS-1$ /** * 10 constant. */ private static final String TEN = "10"; //$NON-NLS-1$ /** * Not a month constant. */ private static final String NOT_A_MONTH = "Not a month!"; //$NON-NLS-1$ /** ===================================================== == File: src/test/java/de/powerstat/validation/values/test/NeighbourhoodTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Neighbourhood; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Neighbourhood tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class NeighbourhoodTests { /** * Unknown. */ private static final String UNKNOWN = "Unknown"; //$NON-NLS-1$ /** * Unknown 2. */ private static final String UNKNOWN2 = "Unknown2"; //$NON-NLS-1$ /** * Illegal argument exception expected constant. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ /** * Neighbourhood not as expected constant. */ private static final String NEIGHBOURHOOD_NOT_AS_EXPECTED = "Neighbourhood not as expected"; //$NON-NLS-1$ /** * Default constructor. ===================================================== == File: src/test/java/de/powerstat/validation/values/test/package-info.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ /** * UnitTests for validation value classes. */ package de.powerstat.validation.values.test; ===================================================== == File: src/test/java/de/powerstat/validation/values/test/PasswordTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Password; import de.powerstat.validation.values.strategies.IPasswordStrategy; import de.powerstat.validation.values.strategies.PasswordConfigurableStrategy; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Password tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class PasswordTests { /** * Password. */ private static final String PASSWORD = "password"; //$NON-NLS-1$ /** * Password 2. */ private static final String PASSWORD2 = "password2"; //$NON-NLS-1$ /** * Password 3 - only for stringValueNoRead() test. */ private static final String PASSWORD3 = "password4"; //$NON-NLS-1$ /** * Illegal argument exception expected constant. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ /** ===================================================== == File: src/test/java/de/powerstat/validation/values/test/PercentTests.java ===================================================== /* * Copyright (C) 2024 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Percent; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Tests for Percent value class. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class PercentTests { /** * Default constructor. */ /* default */ PercentTests() { super(); } /** * Is percent. */ @Test /* default */ void testIsPercent() { final Percent percent = Percent.of(50); assertEquals(50, percent.intValue(), "Percent should be 50"); } /** * Is not a percent. * * @param percent Percent */ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/PoBoxNumberTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.PoBoxNumber; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Post office box number tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class PoBoxNumberTests { /** * Not a po box number constant. */ private static final String NOT_A_PO_BOX_NUMBER = "Not a po box number!"; //$NON-NLS-1$ /** * Result 10 constant. */ private static final String RESULT10 = "10"; //$NON-NLS-1$ /** * Default constructor. */ /* default */ PoBoxNumberTests() { super(); } /** * Factory string test. */ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/PortTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Port; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Tests for Port value class. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class PortTests { /** * Port should be 49152 constant. */ private static final String PORT_SHOULD_BE_49152 = "Port should be 49152!"; //$NON-NLS-1$ /** * Port 49152 constant. */ private static final String PORT_49152 = "49152"; //$NON-NLS-1$ /** * Default constructor. */ /* default */ PortTests() { super(); } /** * Factory string test. */ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/PostalCodeTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.PostalCode; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Postal codes tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class PostalCodeTests { /** * Post code 28000. */ private static final String POSTCODE_28000 = "28000"; //$NON-NLS-1$ /** * Post code 30000. */ private static final String POSTCODE_30000 = "30000"; //$NON-NLS-1$ /** * Illegal argument exception expected constant. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ /** * PostalCode not as expected constant. */ private static final String POSTAL_CODE_NOT_AS_EXPECTED = "PostalCode not as expected"; //$NON-NLS-1$ /** * Default constructor. ===================================================== == File: src/test/java/de/powerstat/validation/values/test/ProvinceTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Province; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Province tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class ProvinceTests { /** * abc. */ private static final String ABC = "abc"; //$NON-NLS-1$ /** * abcd. */ private static final String ABCD = "abcd"; //$NON-NLS-1$ /** * def. */ private static final String DEF = "def"; //$NON-NLS-1$ /** * Illegal argument exception expected constant. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ /** * Province not as expected constant. */ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/ScreenSizeTests.java ===================================================== /* * Copyright (C) 2021-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import de.powerstat.validation.values.ScreenSize; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Screen size tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class ScreenSizeTests { /** * QVGA. */ private static final String QVGA = "QVGA"; //$NON-NLS-1$ /** * 320x240. */ private static final String QVGA320X240 = "320x240"; //$NON-NLS-1$ /** * VGA. */ private static final String VGA = "VGA"; //$NON-NLS-1$ /** * Size is not equal constant. */ private static final String SIZE_IS_NOT_EQUAL = "Size is not equal"; //$NON-NLS-1$ /** * Index out of bounds exception expected constant. */ private static final String INDEX_OUT_OF_BOUNDS_EXPECTED = "Index out of bounds exception expected"; //$NON-NLS-1$ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/SecondsTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Seconds; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Seconds tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class SecondsTests { /** * Not a seconds constant. */ private static final String NOT_A_SECONDS = "Not a seconds!"; //$NON-NLS-1$ /** * Result not as expected constant. */ private static final String RESULT_NOT_AS_EXPECTED = "Result not as expected"; //$NON-NLS-1$ /** * Arithmetic exception expected constant. */ private static final String ARITHMETIC_EXCEPTION_EXPECTED = "Arithmetic exception expected"; //$NON-NLS-1$ /** * Default constructor. */ /* default */ SecondsTests() { super(); } ===================================================== == File: src/test/java/de/powerstat/validation/values/test/SecondTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Second; import de.powerstat.validation.values.Seconds; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Second tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class SecondTests { /** * Not a second constant. */ private static final String NOT_A_SECOND = "Not a second!"; //$NON-NLS-1$ /** * Result not as expected constant. */ private static final String RESULT_NOT_AS_EXPECTED = "Result not as expected"; //$NON-NLS-1$ /** * Arithmetic exception expected constant. */ private static final String ARITHMETIC_EXCEPTION_EXPECTED = "Arithmetic exception expected"; //$NON-NLS-1$ /** * Default constructor. */ /* default */ SecondTests() { super(); ===================================================== == File: src/test/java/de/powerstat/validation/values/test/SIBaseUnitsTests.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; import de.powerstat.validation.values.SIBaseUnits; /** * SI base units tests. */ final class SIBaseUnitsTests { /** * Default constructor. */ /* default */ SIBaseUnitsTests() { super(); } /** * Test getSymbol of SIBaseUnits. */ @Test /* default */ void testGetSymbol() { assertAll("getSymbol", //$NON-NLS-1$ () -> assertEquals("kg", SIBaseUnits.KILOGRAM.getSymbol(), "KILOGRAM symbol not as expected"), //$NON-NLS-1$ () -> assertEquals("m", SIBaseUnits.METRE.getSymbol(), "METRE symbol not as expected"), //$NON-NLS-1$ () -> assertEquals("s", SIBaseUnits.SECOND.getSymbol(), "SECOND symbol not as expected"), //$NON-NLS-1$ () -> assertEquals("K", SIBaseUnits.KELVIN.getSymbol(), "KELVIN symbol not as expected"), //$NON-NLS-1$ () -> assertEquals("mol", SIBaseUnits.MOLE.getSymbol(), "MOLE symbol not as expected"), //$NON-NLS-1$ () -> assertEquals("A", SIBaseUnits.AMPERE.getSymbol(), "AMPERE symbol not as expected"), //$NON-NLS-1$ () -> assertEquals("cd", SIBaseUnits.CANDELA.getSymbol(), "CANDELA symbol not as expected") //$NON-NLS-1$ ); } } ===================================================== == File: src/test/java/de/powerstat/validation/values/test/SIDerivedUnitsTests.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; import de.powerstat.validation.values.SIDerivedUnits; /** * SI derived units tests. */ final class SIDerivedUnitsTests { /** * Default constructor. */ /* default */ SIDerivedUnitsTests() { super(); } /** * Test getSymbol of SIBaseUnits. */ @Test /* default */ void testGetSymbol() { assertAll("getSymbol", //$NON-NLS-1$ () -> assertEquals("Bq", SIDerivedUnits.BECQUEREL.getSymbol(), "BECQUEREL symbol not as expected"), //$NON-NLS-1$ () -> assertEquals("C", SIDerivedUnits.COULOMB.getSymbol(), "COULOMB symbol not as expected"), //$NON-NLS-1$ () -> assertEquals("F", SIDerivedUnits.FARAD.getSymbol(), "FARAD symbol not as expected"), //$NON-NLS-1$ () -> assertEquals("Gy", SIDerivedUnits.GRAY.getSymbol(), "GRAY symbol not as expected"), //$NON-NLS-1$ () -> assertEquals("H", SIDerivedUnits.HENRY.getSymbol(), "HENRY symbol not as expected"), //$NON-NLS-1$ () -> assertEquals("Hz", SIDerivedUnits.HERTZ.getSymbol(), "HERTZ symbol not as expected"), //$NON-NLS-1$ () -> assertEquals("J", SIDerivedUnits.JOULE.getSymbol(), "JOULE symbol not as expected"), //$NON-NLS-1$ () -> assertEquals("lm", SIDerivedUnits.LUMEN.getSymbol(), "LUMEN symbol not as expected"), //$NON-NLS-1$ () -> assertEquals("lx", SIDerivedUnits.LUX.getSymbol(), "LUX symbol not as expected"), //$NON-NLS-1$ () -> assertEquals("N", SIDerivedUnits.NEWTON.getSymbol(), "NEWTON symbol not as expected"), //$NON-NLS-1$ // () -> assertEquals("Ω", SIDerivedUnits.OHM.getSymbol(), "OHM symbol not as expected"), //$NON-NLS-1$ () -> assertEquals("Pa", SIDerivedUnits.PASCAL.getSymbol(), "PASCAL symbol not as expected"), //$NON-NLS-1$ () -> assertEquals("S", SIDerivedUnits.SIEMENS.getSymbol(), "SIEMENS symbol not as expected"), //$NON-NLS-1$ () -> assertEquals("Sv", SIDerivedUnits.SIEVERT.getSymbol(), "SIEVERT symbol not as expected"), //$NON-NLS-1$ () -> assertEquals("T", SIDerivedUnits.TESLA.getSymbol(), "TESLA symbol not as expected"), //$NON-NLS-1$ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/SIPrefixesTests.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.NoSuchElementException; import org.junit.jupiter.api.Test; import de.powerstat.validation.values.SIPrefixes; /** * SI prefixes tests. */ final class SIPrefixesTests { /** * Default constructor. */ /* default */ SIPrefixesTests() { super(); } /** * Test getBase of SIPrefixes. */ @Test /* default */ void testGetBase() { assertAll("constructor", //$NON-NLS-1$ () -> assertEquals(-30, SIPrefixes.QUECTO.getBase(), "QUECTO base not as expected"), //$NON-NLS-1$ () -> assertEquals(-27, SIPrefixes.RONTO.getBase(), "RONTO base not as expected"), //$NON-NLS-1$ () -> assertEquals(-24, SIPrefixes.YOCTO.getBase(), "YOCTO base not as expected"), //$NON-NLS-1$ () -> assertEquals(-21, SIPrefixes.ZEPTO.getBase(), "ZEPTO base not as expected"), //$NON-NLS-1$ () -> assertEquals(-18, SIPrefixes.ATTO.getBase(), "ATTO base not as expected"), //$NON-NLS-1$ () -> assertEquals(-15, SIPrefixes.FEMTO.getBase(), "FEMTO base not as expected"), //$NON-NLS-1$ () -> assertEquals(-12, SIPrefixes.PICO.getBase(), "PICO base not as expected"), //$NON-NLS-1$ () -> assertEquals(-9, SIPrefixes.NANO.getBase(), "NANO base not as expected"), //$NON-NLS-1$ () -> assertEquals(-6, SIPrefixes.MICRO.getBase(), "MICRO base not as expected"), //$NON-NLS-1$ () -> assertEquals(-3, SIPrefixes.MILLI.getBase(), "MILLI base not as expected"), //$NON-NLS-1$ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/StreetTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Street; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Street tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class StreetTests { /** * Street name. */ private static final String ARBERGER_HEERSTR = "Arberger Heerstr."; //$NON-NLS-1$ /** * Street name. */ private static final String HEMELINGER_HEERSTR = "Hemelinger Heerstr."; //$NON-NLS-1$ /** * Illegal argument exception expected constant. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ /** * Street not as expected constant. */ private static final String STREET_NOT_AS_EXPECTED = "Street not as expected"; //$NON-NLS-1$ /** * Default constructor. ===================================================== == File: src/test/java/de/powerstat/validation/values/test/SubBuildingTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.SubBuilding; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Sub building tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class SubBuildingTests { /** * Floor 13 apartment 0815. */ private static final String FLOOR_13_APART_0815 = "Floor 13, Apart. 0815"; //$NON-NLS-1$ /** * Floor 99. */ private static final String FLOOR_99 = "Floor 99"; //$NON-NLS-1$ /** * Illegal argument exception expected constant. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ /** * SubBuilding not as expected constant. */ private static final String SUB_BUILDING_NOT_AS_EXPECTED = "SubBuilding not as expected"; //$NON-NLS-1$ /** * Default constructor. ===================================================== == File: src/test/java/de/powerstat/validation/values/test/TopLevelDomainTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.TopLevelDomain; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Top level domain tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class TopLevelDomainTests { /** * FR - france. */ private static final String FR = "FR"; //$NON-NLS-1$ /** * DE germany. */ private static final String DE = "DE"; //$NON-NLS-1$ /** * Illegal argument exception expected constant. */ private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$ /** * TopLevelDomain not as expected constant. */ private static final String TLD_NOT_AS_EXPECTED = "TopLevelDomain not as expected"; //$NON-NLS-1$ /** * Default constructor. ===================================================== == File: src/test/java/de/powerstat/validation/values/test/UsernameTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Username; import de.powerstat.validation.values.strategies.IUsernameStrategy; import de.powerstat.validation.values.strategies.UsernameDefaultStrategy; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Username tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"}) final class UsernameTests { /** * Username. */ private static final String USERNAME = "username"; //$NON-NLS-1$ /** * Username 2. */ private static final String USERNAME22 = "username2"; //$NON-NLS-1$ /** * Username kh. */ private static final String USERNAME_KH = "kh"; //$NON-NLS-1$ /** * Username not as expected constant. */ private static final String USERNAME_NOT_AS_EXPECTED = "Username not as expected"; //$NON-NLS-1$ /** ===================================================== == File: src/test/java/de/powerstat/validation/values/test/UUIDTests.java ===================================================== /* * Copyright (C) 2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import de.powerstat.validation.values.UUID; /** * UUID tests. */ public class UUIDTests { /** * Default constructor. */ /* default */ UUIDTests() { super(); } /** * Factory test. */ @Test /* default */ void testFactory1() { assertEquals(36, UUID.of().stringValue().length(), "Result not as expected"); } /** * Factory test. */ @Test /* default */ void testFactory2() { assertEquals("a5409f2d-983d-438c-bfdd-308feff7fb1f", UUID.of("a5409f2d-983d-438c-bfdd-308feff7fb1f").stringValue(), "Result not as expected"); } ===================================================== == File: src/test/java/de/powerstat/validation/values/test/WeekdayTests.java ===================================================== /* * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; import de.powerstat.validation.values.Weekday; /** * Weekday tests. */ final class WeekdayTests { /** * Monday action not as expected constant. */ private static final String MONDAY_ACTION_NOT_AS_EXPECTED = "1 action not as expected"; /** * Default constructor. */ /* default */ WeekdayTests() { super(); } /** * Factory string test. */ @Test /* default */ void testFactory1() { assertEquals(1, Weekday.of("MONDAY").getAction(), MONDAY_ACTION_NOT_AS_EXPECTED); //$NON-NLS-1$ } /** * Test getAction of Weekday. */ @Test /* default */ void testGetAction() { ===================================================== == File: src/test/java/de/powerstat/validation/values/test/WeeksTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Weeks; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Weeks tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class WeeksTests { /** * Not a weeks constant. */ private static final String NOT_A_WEEKS = "Not a weeks!"; //$NON-NLS-1$ /** * Result not as expected constant. */ private static final String RESULT_NOT_AS_EXPECTED = "Result not as expected"; //$NON-NLS-1$ /** * Arithmetic exception expected constant. */ private static final String ARITHMETIC_EXCEPTION_EXPECTED = "Arithmetic exception expected"; //$NON-NLS-1$ /** * Default constructor. */ /* default */ WeeksTests() { super(); } ===================================================== == File: src/test/java/de/powerstat/validation/values/test/WeekTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Week; import de.powerstat.validation.values.Weeks; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Week tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class WeekTests { /** * Not a week constant. */ private static final String NOT_A_WEEK = "Not a week!"; //$NON-NLS-1$ /** * Result not as expected constant. */ private static final String RESULT_NOT_AS_EXPECTED = "Result not as expected"; //$NON-NLS-1$ /** * Arithmetic exception expected constant. */ private static final String ARITHMETIC_EXCEPTION_EXPECTED = "Arithmetic exception expected"; //$NON-NLS-1$ /** * Default constructor. */ /* default */ WeekTests() { super(); ===================================================== == File: src/test/java/de/powerstat/validation/values/test/WGS84PositionTests.java ===================================================== /* * Copyright (C) 2021-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import de.powerstat.validation.values.WGS84Position; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * WGS84 position tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class WGS84PositionTests { /** * Index out of bounds exception expected constant. */ private static final String INDEX_OUT_OF_BOUNDS_EXPECTED = "Index out of bounds exception expected"; //$NON-NLS-1$ /** * Test equals constant. */ private static final String TEST_EQUALS = "testEquals"; //$NON-NLS-1$ /** * Zero position constant. */ private static final String ZERO = "0.0 0.0 0.0"; //$NON-NLS-1$ /** * Latitute error constant. */ private static final String LATITUTE_ERROR = "Latitute error!"; //$NON-NLS-1$ /** * Longitute error constant. */ private static final String LONGITUTE_ERROR = "Longitute error!"; //$NON-NLS-1$ ===================================================== == File: src/test/java/de/powerstat/validation/values/test/YearsTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.Years; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Years tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class YearsTests { /** * Not a years constant. */ private static final String NOT_A_YEARS = "Not a years!"; //$NON-NLS-1$ /** * Result not as expected constant. */ private static final String RESULT_NOT_AS_EXPECTED = "Result not as expected"; //$NON-NLS-1$ /** * Arithmetic exception expected constant. */ private static final String ARITHMETIC_EXCEPTION_EXPECTED = "Arithmetic exception expected"; //$NON-NLS-1$ /** * Default constructor. */ /* default */ YearsTests() { super(); } ===================================================== == File: src/test/java/de/powerstat/validation/values/test/YearTests.java ===================================================== /* * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ package de.powerstat.validation.values.test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.provider.ValueSource; import de.powerstat.validation.values.CalendarSystems; import de.powerstat.validation.values.Days; import de.powerstat.validation.values.Months; import de.powerstat.validation.values.Year; import de.powerstat.validation.values.Years; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** * Year tests. */ @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"}) final class YearTests { /** * Result nor as expecte constant. */ private static final String RESULT_NOT_AS_EXPECTED = "Result not as expected"; //$NON-NLS-1$ /** * Arithmetic exception expected constant. */ private static final String ARITHMETIC_EXCEPTION_EXPECTED = "Arithmetic exception expected"; //$NON-NLS-1$ /** * 10 constant. */ private static final String TEN = "10"; //$NON-NLS-1$ /** * Not a year constant. */ ===================================================== == File: src/test/java/module-info.java ===================================================== /* * Copyright (C) 2019-2023 Dipl.-Inform. Kai Hofmann. All rights reserved! */ /** * Validation module in test. */ open module de.powerstat.validation { exports de.powerstat.validation; exports de.powerstat.validation.comparators; exports de.powerstat.validation.containers; exports de.powerstat.validation.entities; exports de.powerstat.validation.interfaces; exports de.powerstat.validation.values; exports de.powerstat.validation.values.strategies; requires org.apache.logging.log4j; requires org.apache.commons.net; requires com.github.spotbugs.annotations; requires org.junit.jupiter.api; requires org.junit.jupiter.params; requires org.junit.platform.launcher; requires org.junit.platform.suite.api; // requires io.cucumber.java; // requires io.cucumber.junit.platform.engine; // requires nl.jqno.equalsverifier; } ===================================================== == File: src/test/resources/log4j2.properties ===================================================== status = error dest = err name = PropertiesConfig property.filename = target/logs/validation.log filter.threshold.type = ThresholdFilter filter.threshold.level = debug appender.console.type = Console appender.console.name = console appender.console.layout.type = PatternLayout appender.console.layout.charset = UTF-8 appender.console.layout.pattern = [%level] %date{ISO8601} %processId/%threadId %logger %encode{%message}{CRLF}%n appender.console.filter.threshold.type = ThresholdFilter appender.console.filter.threshold.level = debug appender.rolling.type = RollingFile appender.rolling.name = rfile appender.rolling.fileName = ${filename} appender.rolling.filePattern = target/logs/validation-%d{yyyy-MM-dd}-%i.log.gz appender.rolling.layout.type = PatternLayout appender.rolling.layout.charset = UTF-8 appender.rolling.layout.pattern = [%level] %date{ISO8601} %processId/%threadId %logger %encode{%message}{CRLF}%n appender.rolling.policies.type = Policies appender.rolling.policies.startup.type = OnStartupTriggeringPolicy appender.rolling.policies.startup.minSize = 1 appender.rolling.policies.size.type = SizeBasedTriggeringPolicy appender.rolling.policies.size.size=10MB appender.rolling.strategy.type = DefaultRolloverStrategy appender.rolling.strategy.max = 5 rootLogger.level = warn rootLogger.appenderRef.console.ref = console logger.powerstat.name = de.powerstat logger.powerstat.level = debug logger.powerstat.additivity = false logger.powerstat.appenderRef.console.ref = console logger.powerstat.appenderRef.rolling.ref = rfile ===================================================== == File: TODOS.md ===================================================== Entity: MeterReader ID, Hersteller/Company name, Bezeichnung/Description, Installationsort/place of installation, History meter reader (Datum, Zählerstand, [Foto}) Meter type: Stromzähler/electric meter, Gaszähler/gas meter, Wasserzähler/water meter, Wärmezähler/heat meter, ... unit of measurement: mwh, kwh, m3, ... Zählwerk: 5-6, Nachkomma: 0,1,3 id: 8, 10, uuid https://en.wikipedia.org/wiki/EAN-8 https://de.wikipedia.org/wiki/European_Article_Number - [ ] Month (enum) names (language dependend) - [ ] Timezone - [ ] Date - [ ] Format - [ ] Holidays - [ ] DateDuration, TimeDuration, DateTimeDuration - [ ] DateRange, TimeRange, DateTimeRange - [ ] Recurring Date / Time - [ ] Time - [ ] DateTime - [ ] UnixEpoche Geburtsdatum (Tag Monat Jahr) Datum, Unterschrift Familienstand: Verheiratet, Verpartnert, geschieden, verwitwert, ledig https://de.wikipedia.org/wiki/Familienstand Staatsangehörigkeit(en)? = Country? https://de.wikipedia.org/wiki/Staatsb%C3%BCrgerschaft Telefonnummer/Fax Internationale Vorwahlen: https://de.wikipedia.org/wiki/L%C3%A4ndervorwahlliste_sortiert_nach_Nummern Ortsvorwahl(de) https://de.wikipedia.org/wiki/Telefonvorwahl_(Deutschland) Rufnummer https://de.wikipedia.org/wiki/Rufnummer Krankenkasse: Name, Verischertennr https://de.wikipedia.org/wiki/Liste_deutscher_Krankenkassen Personalausweisnummer(n) https://de.wikipedia.org/wiki/Personalausweis https://de.wikipedia.org/wiki/Personalausweis_(Deutschland) Reisepassausweisnr https://de.wikipedia.org/wiki/Reisepass https://de.wikipedia.org/wiki/Deutscher_Reisepass Sozialversicherungsnummer https://de.wikipedia.org/wiki/Sozialversicherung https://de.wikipedia.org/wiki/Sozialversicherung_(Deutschland) Steueridentifikationsnummer https://de.wikipedia.org/wiki/Steuerliche_Identifikationsnummer Steuernummer https://de.wikipedia.org/wiki/Steuernummer ===================================================== == File: uml.svg ===================================================== <?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="2005px" preserveAspectRatio="none" style="width:8221px;height:2005px;background:#FFFFFF;" version="1.1" viewBox="0 0 8221 2005" width="8221px" zoomAndPan="magnify"><defs><filter height="300%" id="f1kupinza3sv04" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--MD5=[755e29597bc5389e0596edd8f462f0e4] cluster de.powerstat.validation--><polygon fill="#FFFFFF" filter="url(#f1kupinza3sv04)" points="5642,159.5,5834,159.5,5841,181.7969,6008,181.7969,6008,284.5,5642,284.5,5642,159.5" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="5642" x2="5841" y1="181.7969" y2="181.7969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="186" x="5646" y="174.4951">de.powerstat.validation</text><!--MD5=[84d511e7c32af5232eeea429c942bbb9] cluster de.powerstat.validation.comparators--><polygon fill="#FFFFFF" filter="url(#f1kupinza3sv04)" points="6167,909.5,6464,909.5,6471,931.7969,6474,931.7969,6474,1021.5,6167,1021.5,6167,909.5" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="6167" x2="6471" y1="931.7969" y2="931.7969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="291" x="6171" y="924.4951">de.powerstat.validation.comparators</text><!--MD5=[71cef281550d46a7b1d13e959a20f3f7] cluster de.powerstat.validation.entities--><polygon fill="#FFFFFF" filter="url(#f1kupinza3sv04)" points="3011,6,3267,6,3274,28.2969,3661,28.2969,3661,438,3011,438,3011,6" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="3011" x2="3274" y1="28.2969" y2="28.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="250" x="3015" y="20.9951">de.powerstat.validation.entities</text><!--MD5=[a004a435b6d3949b7e433d764d55d68a] cluster de.powerstat.validation.entities.impl--><polygon fill="#FFFFFF" filter="url(#f1kupinza3sv04)" points="7010,115,7303,115,7310,137.2969,7324,137.2969,7324,329,7010,329,7010,115" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="7010" x2="7310" y1="137.2969" y2="137.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="287" x="7014" y="129.9951">de.powerstat.validation.entities.impl</text><!--MD5=[e3e8536fed9ea7366da6ee0cf1121425] cluster de.powerstat.validation.values--><polygon fill="#FFFFFF" filter="url(#f1kupinza3sv04)" points="16,462,264,462,271,484.2969,6143,484.2969,6143,1998,16,1998,16,462" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="16" x2="271" y1="484.2969" y2="484.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="242" x="20" y="476.9951">de.powerstat.validation.values</text><!--MD5=[515c05aca52766320637be6e4301bf93] cluster de.powerstat.validation.values.impl--><polygon fill="#FFFFFF" filter="url(#f1kupinza3sv04)" points="6167,1171,6452,1171,6459,1193.2969,6497,1193.2969,6497,1557,6167,1557,6167,1171" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="6167" x2="6459" y1="1193.2969" y2="1193.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="279" x="6171" y="1185.9951">de.powerstat.validation.values.impl</text><!--MD5=[2cf06c972232331e8807be23d0657989] cluster de.powerstat.validation.values.strategies--><polygon fill="#FFFFFF" filter="url(#f1kupinza3sv04)" points="6521,909.5,6854,909.5,6861,931.7969,8204,931.7969,8204,1551,6521,1551,6521,909.5" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="6521" x2="6861" y1="931.7969" y2="931.7969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="327" x="6525" y="924.4951">de.powerstat.validation.values.strategies</text><!--MD5=[f0f0e1d48894ff96f4dede1daa279842] class ValidationUtils--><rect codeLine="4" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="73.6094" id="ValidationUtils" style="stroke:#A80036;stroke-width:1.5;" width="333" x="5658.5" y="194.5"/><ellipse cx="5776.25" cy="210.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M5779.2188,216.1406 Q5778.6406,216.4375 5778,216.5781 Q5777.3594,216.7344 5776.6563,216.7344 Q5774.1563,216.7344 5772.8281,215.0938 Q5771.5156,213.4375 5771.5156,210.3125 Q5771.5156,207.1875 5772.8281,205.5313 Q5774.1563,203.875 5776.6563,203.875 Q5777.3594,203.875 5778,204.0313 Q5778.6563,204.1875 5779.2188,204.4844 L5779.2188,207.2031 Q5778.5938,206.625 5778,206.3594 Q5777.4063,206.0781 5776.7813,206.0781 Q5775.4375,206.0781 5774.75,207.1563 Q5774.0625,208.2188 5774.0625,210.3125 Q5774.0625,212.4063 5774.75,213.4844 Q5775.4375,214.5469 5776.7813,214.5469 Q5777.4063,214.5469 5778,214.2813 Q5778.5938,214 5779.2188,213.4219 L5779.2188,216.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="89" x="5796.75" y="214.6543">ValidationUtils</text><line style="stroke:#A80036;stroke-width:1.5;" x1="5659.5" x2="5990.5" y1="226.5" y2="226.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="5659.5" x2="5990.5" y1="234.5" y2="234.5"/><ellipse cx="5669.5" cy="245.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="208" x="5678.5" y="248.7104">String sanitizeUrlPath(String urlPath)</text><ellipse cx="5669.5" cy="258.3047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="307" x="5678.5" y="261.5151">List<String> splitHostnamePort(String hostnamePort)</text><!--MD5=[86b57fbf74d4b844b10c07964a6b153a] class ComparatorEMailByDomain--><rect codeLine="11" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="60.8047" id="ComparatorEMailByDomain" style="stroke:#A80036;stroke-width:1.5;" width="252" x="6183" y="944.5"/><ellipse cx="6221.85" cy="960.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M6224.8188,966.1406 Q6224.2406,966.4375 6223.6,966.5781 Q6222.9594,966.7344 6222.2563,966.7344 Q6219.7563,966.7344 6218.4281,965.0938 Q6217.1156,963.4375 6217.1156,960.3125 Q6217.1156,957.1875 6218.4281,955.5313 Q6219.7563,953.875 6222.2563,953.875 Q6222.9594,953.875 6223.6,954.0313 Q6224.2563,954.1875 6224.8188,954.4844 L6224.8188,957.2031 Q6224.1938,956.625 6223.6,956.3594 Q6223.0063,956.0781 6222.3813,956.0781 Q6221.0375,956.0781 6220.35,957.1563 Q6219.6625,958.2188 6219.6625,960.3125 Q6219.6625,962.4063 6220.35,963.4844 Q6221.0375,964.5469 6222.3813,964.5469 Q6223.0063,964.5469 6223.6,964.2813 Q6224.1938,964 6224.8188,963.4219 L6224.8188,966.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="167" x="6241.15" y="964.6543">ComparatorEMailByDomain</text><line style="stroke:#A80036;stroke-width:1.5;" x1="6184" x2="6434" y1="976.5" y2="976.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="6184" x2="6434" y1="984.5" y2="984.5"/><ellipse cx="6194" cy="995.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="226" x="6203" y="998.7104">int compare(EMail email1, EMail email2)</text><!--MD5=[09ce52be0ee7de43c61b6e2d59bf108b] class Person--><rect codeLine="17" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="380.9219" id="Person" style="stroke:#A80036;stroke-width:1.5;" width="617" x="3027.5" y="41"/><ellipse cx="3309.75" cy="57" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M3312.7188,62.6406 Q3312.1406,62.9375 3311.5,63.0781 Q3310.8594,63.2344 3310.1563,63.2344 Q3307.6563,63.2344 3306.3281,61.5938 Q3305.0156,59.9375 3305.0156,56.8125 Q3305.0156,53.6875 3306.3281,52.0313 Q3307.6563,50.375 3310.1563,50.375 Q3310.8594,50.375 3311.5,50.5313 Q3312.1563,50.6875 3312.7188,50.9844 L3312.7188,53.7031 Q3312.0938,53.125 3311.5,52.8594 Q3310.9063,52.5781 3310.2813,52.5781 Q3308.9375,52.5781 3308.25,53.6563 Q3307.5625,54.7188 3307.5625,56.8125 Q3307.5625,58.9063 3308.25,59.9844 Q3308.9375,61.0469 3310.2813,61.0469 Q3310.9063,61.0469 3311.5,60.7813 Q3312.0938,60.5 3312.7188,59.9219 L3312.7188,62.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="44" x="3330.25" y="61.1543">Person</text><line style="stroke:#A80036;stroke-width:1.5;" x1="3028.5" x2="3643.5" y1="73" y2="73"/><line style="stroke:#A80036;stroke-width:1.5;" x1="3028.5" x2="3643.5" y1="81" y2="81"/><ellipse cx="3038.5" cy="92" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="63" x="3047.5" y="95.2104">Person of()</text><ellipse cx="3038.5" cy="104.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="270" x="3047.5" y="108.0151">Person of(Lastname lastname, Gender gender)</text><ellipse cx="3038.5" cy="117.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="439" x="3047.5" y="120.8198">Person of(Lastname lastname, Gender gender, List<Firstname> firstnames)</text><ellipse cx="3038.5" cy="130.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="591" x="3047.5" y="133.6245">Person of(Lastname lastname, Gender gender, List<Firstname> firstnames, OffsetDateTime birthdate)</text><ellipse cx="3038.5" cy="143.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="3047.5" y="146.4292">int hashCode()</text><ellipse cx="3038.5" cy="156.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="3047.5" y="159.2339">boolean equals(Object obj)</text><ellipse cx="3038.5" cy="168.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="3047.5" y="172.0386">String toString()</text><ellipse cx="3038.5" cy="181.6328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="151" x="3047.5" y="184.8433">int compareTo(Person obj)</text><ellipse cx="3038.5" cy="194.4375" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="180" x="3047.5" y="197.6479">Lastname getLastnameAtBirth()</text><ellipse cx="3038.5" cy="207.2422" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="176" x="3047.5" y="210.4526">Lastname getLastnameActual()</text><ellipse cx="3038.5" cy="220.0469" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="191" x="3047.5" y="223.2573">Lastname getLastnamePrevious()</text><ellipse cx="3038.5" cy="232.8516" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="335" x="3047.5" y="236.062">void addLastname(OffsetDateTime since, Lastname name)</text><ellipse cx="3038.5" cy="245.6563" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="3047.5" y="248.8667">Gender getGenderAtBirth()</text><ellipse cx="3038.5" cy="258.4609" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="148" x="3047.5" y="261.6714">Gender getGenderActual()</text><ellipse cx="3038.5" cy="271.2656" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="163" x="3047.5" y="274.4761">Gender getGenderPrevious()</text><ellipse cx="3038.5" cy="284.0703" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="315" x="3047.5" y="287.2808">void addGender(OffsetDateTime since, Gender gender)</text><ellipse cx="3038.5" cy="296.875" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="227" x="3047.5" y="300.0854">List<Firstname> getFirstnamesAtBirth()</text><ellipse cx="3038.5" cy="309.6797" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="223" x="3047.5" y="312.8901">List<Firstname> getFirstnamesActual()</text><ellipse cx="3038.5" cy="322.4844" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="238" x="3047.5" y="325.6948">List<Firstname> getFirstnamesPrevious()</text><ellipse cx="3038.5" cy="335.2891" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="389" x="3047.5" y="338.4995">void addFirstnames(OffsetDateTime since, List<Firstname> names)</text><ellipse cx="3038.5" cy="348.0938" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="218" x="3047.5" y="351.3042">void setBirthday(OffsetDateTime date)</text><ellipse cx="3038.5" cy="360.8984" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="231" x="3047.5" y="364.1089">Optional<OffsetDateTime> getBirthday()</text><ellipse cx="3038.5" cy="373.7031" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="229" x="3047.5" y="376.9136">void setDeathdate(OffsetDateTime date)</text><ellipse cx="3038.5" cy="386.5078" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="242" x="3047.5" y="389.7183">Optional<OffsetDateTime> getDeathdate()</text><ellipse cx="3038.5" cy="399.3125" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="257" x="3047.5" y="402.5229">void setBloodGroup(BloodGroup bloodGroup)</text><ellipse cx="3038.5" cy="412.1172" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="229" x="3047.5" y="415.3276">Optional<BloodGroup> getBloodGroup()</text><!--MD5=[62991783bada11577fb72b337a1f209b] class HistoryOf--><rect codeLine="48" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="163.2422" id="HistoryOf" style="stroke:#A80036;stroke-width:1.5;" width="282" x="7026" y="150"/><ellipse cx="7129.25" cy="166" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M7132.2188,171.6406 Q7131.6406,171.9375 7131,172.0781 Q7130.3594,172.2344 7129.6563,172.2344 Q7127.1563,172.2344 7125.8281,170.5938 Q7124.5156,168.9375 7124.5156,165.8125 Q7124.5156,162.6875 7125.8281,161.0313 Q7127.1563,159.375 7129.6563,159.375 Q7130.3594,159.375 7131,159.5313 Q7131.6563,159.6875 7132.2188,159.9844 L7132.2188,162.7031 Q7131.5938,162.125 7131,161.8594 Q7130.4063,161.5781 7129.7813,161.5781 Q7128.4375,161.5781 7127.75,162.6563 Q7127.0625,163.7188 7127.0625,165.8125 Q7127.0625,167.9063 7127.75,168.9844 Q7128.4375,170.0469 7129.7813,170.0469 Q7130.4063,170.0469 7131,169.7813 Q7131.5938,169.5 7132.2188,168.9219 L7132.2188,171.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="56" x="7149.75" y="170.1543">HistoryOf</text><rect fill="#FFFFFF" height="15.9688" style="stroke:#000000;stroke-width:1.0;stroke-dasharray:2.0,2.0;" width="9" x="7302" y="147"/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="7" x="7303" y="159.1387">T</text><line style="stroke:#A80036;stroke-width:1.5;" x1="7027" x2="7307" y1="182" y2="182"/><line style="stroke:#A80036;stroke-width:1.5;" x1="7027" x2="7307" y1="190" y2="190"/><ellipse cx="7037" cy="201" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="61" x="7046" y="204.2104">HistoryOf()</text><ellipse cx="7037" cy="213.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="7046" y="217.0151">int hashCode()</text><ellipse cx="7037" cy="226.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="7046" y="229.8198">boolean equals(Object obj)</text><ellipse cx="7037" cy="239.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="7046" y="242.6245">String toString()</text><ellipse cx="7037" cy="252.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="256" x="7046" y="255.4292">void addEntry(OffsetDateTime since, T entry)</text><ellipse cx="7037" cy="265.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="7046" y="268.2339">T getFirstEntry()</text><ellipse cx="7037" cy="277.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="101" x="7046" y="281.0386">T getLatestEntry()</text><ellipse cx="7037" cy="290.6328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="115" x="7046" y="293.8433">T getPreviousEntry()</text><ellipse cx="7037" cy="303.4375" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="253" x="7046" y="306.6479">SortedMap<OffsetDateTime, T> getHistory()</text><!--MD5=[0f39e4cb6f03951afbf6d14bd2505654] class Address--><rect codeLine="62" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="329.7031" id="Address" style="stroke:#A80036;stroke-width:1.5;" width="1898" x="269" y="497"/><ellipse cx="1188.25" cy="513" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M1191.2188,518.6406 Q1190.6406,518.9375 1190,519.0781 Q1189.3594,519.2344 1188.6563,519.2344 Q1186.1563,519.2344 1184.8281,517.5938 Q1183.5156,515.9375 1183.5156,512.8125 Q1183.5156,509.6875 1184.8281,508.0313 Q1186.1563,506.375 1188.6563,506.375 Q1189.3594,506.375 1190,506.5313 Q1190.6563,506.6875 1191.2188,506.9844 L1191.2188,509.7031 Q1190.5938,509.125 1190,508.8594 Q1189.4063,508.5781 1188.7813,508.5781 Q1187.4375,508.5781 1186.75,509.6563 Q1186.0625,510.7188 1186.0625,512.8125 Q1186.0625,514.9063 1186.75,515.9844 Q1187.4375,517.0469 1188.7813,517.0469 Q1189.4063,517.0469 1190,516.7813 Q1190.5938,516.5 1191.2188,515.9219 L1191.2188,518.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="51" x="1208.75" y="517.1543">Address</text><line style="stroke:#A80036;stroke-width:1.5;" x1="270" x2="2166" y1="529" y2="529"/><line style="stroke:#A80036;stroke-width:1.5;" x1="270" x2="2166" y1="537" y2="537"/><ellipse cx="280" cy="548" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="1857" x="289" y="551.2104">Address(Country country, PostalCode postalCode, City city, Province province, District district, Street street, BuildingNr buildingNr, BuildingName buildingName, SubBuilding subBuilding, PoBoxNumber poBoxNumber, Department department, Neighbourhood neighbourhood, Block block, BFPONumber bFPONumber, Lines lines)</text><ellipse cx="280" cy="560.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="1872" x="289" y="564.0151">Address of(Country country, PostalCode postalCode, City city, Province province, District district, Street street, BuildingNr buildingNr, BuildingName buildingName, SubBuilding subBuilding, PoBoxNumber poBoxNumber, Department department, Neighbourhood neighbourhood, Block block, BFPONumber bFPONumber, Lines lines)</text><ellipse cx="280" cy="573.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="289" y="576.8198">int hashCode()</text><ellipse cx="280" cy="586.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="289" y="589.6245">boolean equals(Object obj)</text><ellipse cx="280" cy="599.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="289" y="602.4292">String toString()</text><ellipse cx="280" cy="612.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="158" x="289" y="615.2339">int compareTo(Address obj)</text><ellipse cx="280" cy="624.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="289" x="289" y="628.0386">String getFormattedAddress(String recipientName)</text><ellipse cx="280" cy="637.6328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="118" x="289" y="640.8433">Country getCountry()</text><ellipse cx="280" cy="650.4375" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="158" x="289" y="653.6479">PostalCode getPostalCode()</text><ellipse cx="280" cy="663.2422" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="72" x="289" y="666.4526">City getCity()</text><ellipse cx="280" cy="676.0469" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="126" x="289" y="679.2573">Province getProvince()</text><ellipse cx="280" cy="688.8516" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="110" x="289" y="692.062">District getDistrict()</text><ellipse cx="280" cy="701.6563" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="100" x="289" y="704.8667">Street getStreet()</text><ellipse cx="280" cy="714.4609" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="146" x="289" y="717.6714">BuildingNr getBuildingNr()</text><ellipse cx="280" cy="727.2656" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="186" x="289" y="730.4761">BuildingName getBuildingName()</text><ellipse cx="280" cy="740.0703" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="164" x="289" y="743.2808">SubBuilding getSubBuilding()</text><ellipse cx="280" cy="752.875" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="190" x="289" y="756.0854">PoBoxNumber getPoBoxNumber()</text><ellipse cx="280" cy="765.6797" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="164" x="289" y="768.8901">Department getDepartment()</text><ellipse cx="280" cy="778.4844" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="202" x="289" y="781.6948">Neighbourhood getNeighbourhood()</text><ellipse cx="280" cy="791.2891" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="90" x="289" y="794.4995">Block getBlock()</text><ellipse cx="280" cy="804.0938" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="180" x="289" y="807.3042">BFPONumber getBFPONumber()</text><ellipse cx="280" cy="816.8984" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="90" x="289" y="820.1089">Lines getLines()</text><!--MD5=[19da4513a4132d566fb9cb4f974fcbef] class AddressWithWGS84Position--><rect codeLine="87" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="86.4141" id="AddressWithWGS84Position" style="stroke:#A80036;stroke-width:1.5;" width="2148" x="805" y="932"/><ellipse cx="1788.75" cy="948" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M1791.7188,953.6406 Q1791.1406,953.9375 1790.5,954.0781 Q1789.8594,954.2344 1789.1563,954.2344 Q1786.6563,954.2344 1785.3281,952.5938 Q1784.0156,950.9375 1784.0156,947.8125 Q1784.0156,944.6875 1785.3281,943.0313 Q1786.6563,941.375 1789.1563,941.375 Q1789.8594,941.375 1790.5,941.5313 Q1791.1563,941.6875 1791.7188,941.9844 L1791.7188,944.7031 Q1791.0938,944.125 1790.5,943.8594 Q1789.9063,943.5781 1789.2813,943.5781 Q1787.9375,943.5781 1787.25,944.6563 Q1786.5625,945.7188 1786.5625,947.8125 Q1786.5625,949.9063 1787.25,950.9844 Q1787.9375,952.0469 1789.2813,952.0469 Q1789.9063,952.0469 1790.5,951.7813 Q1791.0938,951.5 1791.7188,950.9219 L1791.7188,953.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="172" x="1809.25" y="952.1543">AddressWithWGS84Position</text><line style="stroke:#A80036;stroke-width:1.5;" x1="806" x2="2952" y1="964" y2="964"/><line style="stroke:#A80036;stroke-width:1.5;" x1="806" x2="2952" y1="972" y2="972"/><ellipse cx="816" cy="983" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="2107" x="825" y="986.2104">AddressWithWGS84Position(Country country, PostalCode postalCode, City city, Province province, District district, Street street, BuildingNr buildingNr, BuildingName buildingName, SubBuilding subBuilding, PoBoxNumber poBoxNumber, Department department, Neighbourhood neighbourhood, Block block, BFPONumber bFPONumber, Lines lines, WGS84Position position)</text><ellipse cx="816" cy="995.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="2122" x="825" y="999.0151">AddressWithWGS84Position of(Country country, PostalCode postalCode, City city, Province province, District district, Street street, BuildingNr buildingNr, BuildingName buildingName, SubBuilding subBuilding, PoBoxNumber poBoxNumber, Department department, Neighbourhood neighbourhood, Block block, BFPONumber bFPONumber, Lines lines, WGS84Position position)</text><ellipse cx="816" cy="1008.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="160" x="825" y="1011.8198">WGS84Position getPosition()</text><!--MD5=[4aa64bfe20ab104267208f166a6699cd] class BFPONumber--><rect codeLine="93" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="150.4375" id="BFPONumber" style="stroke:#A80036;stroke-width:1.5;" width="216" x="1412" y="1161.5"/><ellipse cx="1475.25" cy="1177.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M1478.2188,1183.1406 Q1477.6406,1183.4375 1477,1183.5781 Q1476.3594,1183.7344 1475.6563,1183.7344 Q1473.1563,1183.7344 1471.8281,1182.0938 Q1470.5156,1180.4375 1470.5156,1177.3125 Q1470.5156,1174.1875 1471.8281,1172.5313 Q1473.1563,1170.875 1475.6563,1170.875 Q1476.3594,1170.875 1477,1171.0313 Q1477.6563,1171.1875 1478.2188,1171.4844 L1478.2188,1174.2031 Q1477.5938,1173.625 1477,1173.3594 Q1476.4063,1173.0781 1475.7813,1173.0781 Q1474.4375,1173.0781 1473.75,1174.1563 Q1473.0625,1175.2188 1473.0625,1177.3125 Q1473.0625,1179.4063 1473.75,1180.4844 Q1474.4375,1181.5469 1475.7813,1181.5469 Q1476.4063,1181.5469 1477,1181.2813 Q1477.5938,1181 1478.2188,1180.4219 L1478.2188,1183.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="81" x="1495.75" y="1181.6543">BFPONumber</text><line style="stroke:#A80036;stroke-width:1.5;" x1="1413" x2="1627" y1="1193.5" y2="1193.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="1413" x2="1627" y1="1201.5" y2="1201.5"/><ellipse cx="1423" cy="1212.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="175" x="1432" y="1215.7104">BFPONumber(int bFPONumber)</text><ellipse cx="1423" cy="1225.3047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="190" x="1432" y="1228.5151">BFPONumber of(int bFPONumber)</text><ellipse cx="1423" cy="1238.1094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="119" x="1432" y="1241.3198">int getBFPONumber()</text><ellipse cx="1423" cy="1250.9141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="156" x="1432" y="1254.1245">String getBFPONumberStr()</text><ellipse cx="1423" cy="1263.7188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="1432" y="1266.9292">int hashCode()</text><ellipse cx="1423" cy="1276.5234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="1432" y="1279.7339">boolean equals(Object obj)</text><ellipse cx="1423" cy="1289.3281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="1432" y="1292.5386">String toString()</text><ellipse cx="1423" cy="1302.1328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="186" x="1432" y="1305.3433">int compareTo(BFPONumber obj)</text><!--MD5=[338a58b6fd3aa2d84bfc728746eafac4] class BIC--><rect codeLine="104" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="BIC" style="stroke:#A80036;stroke-width:1.5;" width="178" x="2960" y="593"/><ellipse cx="3035.25" cy="609" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M3038.2188,614.6406 Q3037.6406,614.9375 3037,615.0781 Q3036.3594,615.2344 3035.6563,615.2344 Q3033.1563,615.2344 3031.8281,613.5938 Q3030.5156,611.9375 3030.5156,608.8125 Q3030.5156,605.6875 3031.8281,604.0313 Q3033.1563,602.375 3035.6563,602.375 Q3036.3594,602.375 3037,602.5313 Q3037.6563,602.6875 3038.2188,602.9844 L3038.2188,605.7031 Q3037.5938,605.125 3037,604.8594 Q3036.4063,604.5781 3035.7813,604.5781 Q3034.4375,604.5781 3033.75,605.6563 Q3033.0625,606.7188 3033.0625,608.8125 Q3033.0625,610.9063 3033.75,611.9844 Q3034.4375,613.0469 3035.7813,613.0469 Q3036.4063,613.0469 3037,612.7813 Q3037.5938,612.5 3038.2188,611.9219 L3038.2188,614.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="19" x="3055.75" y="613.1543">BIC</text><line style="stroke:#A80036;stroke-width:1.5;" x1="2961" x2="3137" y1="625" y2="625"/><line style="stroke:#A80036;stroke-width:1.5;" x1="2961" x2="3137" y1="633" y2="633"/><ellipse cx="2971" cy="644" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="81" x="2980" y="647.2104">BIC(String bic)</text><ellipse cx="2971" cy="656.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="96" x="2980" y="660.0151">BIC of(String bic)</text><ellipse cx="2971" cy="669.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="2980" y="672.8198">String getBIC()</text><ellipse cx="2971" cy="682.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="2980" y="685.6245">int hashCode()</text><ellipse cx="2971" cy="695.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="2980" y="698.4292">boolean equals(Object obj)</text><ellipse cx="2971" cy="708.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="2980" y="711.2339">String toString()</text><ellipse cx="2971" cy="720.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="130" x="2980" y="724.0386">int compareTo(BIC obj)</text><!--MD5=[68a0c021ad4fbab63794e91c3c368f48] class Block--><rect codeLine="114" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="Block" style="stroke:#A80036;stroke-width:1.5;" width="178" x="3571" y="593"/><ellipse cx="3639.25" cy="609" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M3642.2188,614.6406 Q3641.6406,614.9375 3641,615.0781 Q3640.3594,615.2344 3639.6563,615.2344 Q3637.1563,615.2344 3635.8281,613.5938 Q3634.5156,611.9375 3634.5156,608.8125 Q3634.5156,605.6875 3635.8281,604.0313 Q3637.1563,602.375 3639.6563,602.375 Q3640.3594,602.375 3641,602.5313 Q3641.6563,602.6875 3642.2188,602.9844 L3642.2188,605.7031 Q3641.5938,605.125 3641,604.8594 Q3640.4063,604.5781 3639.7813,604.5781 Q3638.4375,604.5781 3637.75,605.6563 Q3637.0625,606.7188 3637.0625,608.8125 Q3637.0625,610.9063 3637.75,611.9844 Q3638.4375,613.0469 3639.7813,613.0469 Q3640.4063,613.0469 3641,612.7813 Q3641.5938,612.5 3642.2188,611.9219 L3642.2188,614.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="33" x="3659.75" y="613.1543">Block</text><line style="stroke:#A80036;stroke-width:1.5;" x1="3572" x2="3748" y1="625" y2="625"/><line style="stroke:#A80036;stroke-width:1.5;" x1="3572" x2="3748" y1="633" y2="633"/><ellipse cx="3582" cy="644" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="105" x="3591" y="647.2104">Block(String block)</text><ellipse cx="3582" cy="656.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="120" x="3591" y="660.0151">Block of(String block)</text><ellipse cx="3582" cy="669.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="94" x="3591" y="672.8198">String getBlock()</text><ellipse cx="3582" cy="682.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="3591" y="685.6245">int hashCode()</text><ellipse cx="3582" cy="695.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="3591" y="698.4292">boolean equals(Object obj)</text><ellipse cx="3582" cy="708.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="3591" y="711.2339">String toString()</text><ellipse cx="3582" cy="720.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="141" x="3591" y="724.0386">int compareTo(Block obj)</text><!--MD5=[f4130e5415ff6a11eed1549deb595d3f] class BloodGroup--><rect codeLine="124" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="99.2188" id="BloodGroup" style="stroke:#A80036;stroke-width:1.5;" width="286" x="3784" y="612.5"/><ellipse cx="3886.25" cy="628.5" fill="#EB937F" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M3890.3594,634.5 L3882.6406,634.5 L3882.6406,622.1094 L3890.3594,622.1094 L3890.3594,624.2656 L3885.0938,624.2656 L3885.0938,626.9375 L3889.8594,626.9375 L3889.8594,629.0938 L3885.0938,629.0938 L3885.0938,632.3438 L3890.3594,632.3438 L3890.3594,634.5 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="73" x="3906.75" y="632.6543">BloodGroup</text><line style="stroke:#A80036;stroke-width:1.5;" x1="3785" x2="4069" y1="644.5" y2="644.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="3785" x2="4069" y1="652.5" y2="652.5"/><ellipse cx="3795" cy="663.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="127" x="3804" y="666.7104">BloodGroup(int action)</text><ellipse cx="3795" cy="676.3047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="78" x="3804" y="679.5151">int getAction()</text><ellipse cx="3795" cy="689.1094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="242" x="3804" y="692.3198">boolean couldDonateTo(BloodGroup other)</text><ellipse cx="3795" cy="701.9141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="260" x="3804" y="705.1245">boolean couldReceiveFrom(BloodGroup other)</text><!--MD5=[454d980de7ec19c426bfaad009ef01a6] class BuildingName--><rect codeLine="131" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="BuildingName" style="stroke:#A80036;stroke-width:1.5;" width="242" x="4105" y="593"/><ellipse cx="4179.25" cy="609" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M4182.2188,614.6406 Q4181.6406,614.9375 4181,615.0781 Q4180.3594,615.2344 4179.6563,615.2344 Q4177.1563,615.2344 4175.8281,613.5938 Q4174.5156,611.9375 4174.5156,608.8125 Q4174.5156,605.6875 4175.8281,604.0313 Q4177.1563,602.375 4179.6563,602.375 Q4180.3594,602.375 4181,602.5313 Q4181.6563,602.6875 4182.2188,602.9844 L4182.2188,605.7031 Q4181.5938,605.125 4181,604.8594 Q4180.4063,604.5781 4179.7813,604.5781 Q4178.4375,604.5781 4177.75,605.6563 Q4177.0625,606.7188 4177.0625,608.8125 Q4177.0625,610.9063 4177.75,611.9844 Q4178.4375,613.0469 4179.7813,613.0469 Q4180.4063,613.0469 4181,612.7813 Q4181.5938,612.5 4182.2188,611.9219 L4182.2188,614.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="85" x="4199.75" y="613.1543">BuildingName</text><line style="stroke:#A80036;stroke-width:1.5;" x1="4106" x2="4346" y1="625" y2="625"/><line style="stroke:#A80036;stroke-width:1.5;" x1="4106" x2="4346" y1="633" y2="633"/><ellipse cx="4116" cy="644" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="201" x="4125" y="647.2104">BuildingName(String buildingName)</text><ellipse cx="4116" cy="656.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="216" x="4125" y="660.0151">BuildingName of(String buildingName)</text><ellipse cx="4116" cy="669.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="142" x="4125" y="672.8198">String getBuildingName()</text><ellipse cx="4116" cy="682.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="4125" y="685.6245">int hashCode()</text><ellipse cx="4116" cy="695.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="4125" y="698.4292">boolean equals(Object obj)</text><ellipse cx="4116" cy="708.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="4125" y="711.2339">String toString()</text><ellipse cx="4116" cy="720.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="189" x="4125" y="724.0386">int compareTo(BuildingName obj)</text><!--MD5=[65b9b52d6af9efa887dfc40b1f1adb90] class BuildingNr--><rect codeLine="141" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="BuildingNr" style="stroke:#A80036;stroke-width:1.5;" width="202" x="2110" y="1167.5"/><ellipse cx="2175.25" cy="1183.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M2178.2188,1189.1406 Q2177.6406,1189.4375 2177,1189.5781 Q2176.3594,1189.7344 2175.6563,1189.7344 Q2173.1563,1189.7344 2171.8281,1188.0938 Q2170.5156,1186.4375 2170.5156,1183.3125 Q2170.5156,1180.1875 2171.8281,1178.5313 Q2173.1563,1176.875 2175.6563,1176.875 Q2176.3594,1176.875 2177,1177.0313 Q2177.6563,1177.1875 2178.2188,1177.4844 L2178.2188,1180.2031 Q2177.5938,1179.625 2177,1179.3594 Q2176.4063,1179.0781 2175.7813,1179.0781 Q2174.4375,1179.0781 2173.75,1180.1563 Q2173.0625,1181.2188 2173.0625,1183.3125 Q2173.0625,1185.4063 2173.75,1186.4844 Q2174.4375,1187.5469 2175.7813,1187.5469 Q2176.4063,1187.5469 2177,1187.2813 Q2177.5938,1187 2178.2188,1186.4219 L2178.2188,1189.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="2195.75" y="1187.6543">BuildingNr</text><line style="stroke:#A80036;stroke-width:1.5;" x1="2111" x2="2311" y1="1199.5" y2="1199.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="2111" x2="2311" y1="1207.5" y2="1207.5"/><ellipse cx="2121" cy="1218.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="161" x="2130" y="1221.7104">BuildingNr(String buildingNr)</text><ellipse cx="2121" cy="1231.3047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="176" x="2130" y="1234.5151">BuildingNr of(String buildingNr)</text><ellipse cx="2121" cy="1244.1094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="122" x="2130" y="1247.3198">String getBuildingNr()</text><ellipse cx="2121" cy="1256.9141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="2130" y="1260.1245">int hashCode()</text><ellipse cx="2121" cy="1269.7188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="2130" y="1272.9292">boolean equals(Object obj)</text><ellipse cx="2121" cy="1282.5234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="2130" y="1285.7339">String toString()</text><ellipse cx="2121" cy="1295.3281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="169" x="2130" y="1298.5386">int compareTo(BuildingNr obj)</text><!--MD5=[9466097c40aeafc62ec36a0cc4f3c955] class City--><rect codeLine="151" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="City" style="stroke:#A80036;stroke-width:1.5;" width="178" x="4382" y="593"/><ellipse cx="4455.75" cy="609" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M4458.7188,614.6406 Q4458.1406,614.9375 4457.5,615.0781 Q4456.8594,615.2344 4456.1563,615.2344 Q4453.6563,615.2344 4452.3281,613.5938 Q4451.0156,611.9375 4451.0156,608.8125 Q4451.0156,605.6875 4452.3281,604.0313 Q4453.6563,602.375 4456.1563,602.375 Q4456.8594,602.375 4457.5,602.5313 Q4458.1563,602.6875 4458.7188,602.9844 L4458.7188,605.7031 Q4458.0938,605.125 4457.5,604.8594 Q4456.9063,604.5781 4456.2813,604.5781 Q4454.9375,604.5781 4454.25,605.6563 Q4453.5625,606.7188 4453.5625,608.8125 Q4453.5625,610.9063 4454.25,611.9844 Q4454.9375,613.0469 4456.2813,613.0469 Q4456.9063,613.0469 4457.5,612.7813 Q4458.0938,612.5 4458.7188,611.9219 L4458.7188,614.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="22" x="4476.25" y="613.1543">City</text><line style="stroke:#A80036;stroke-width:1.5;" x1="4383" x2="4559" y1="625" y2="625"/><line style="stroke:#A80036;stroke-width:1.5;" x1="4383" x2="4559" y1="633" y2="633"/><ellipse cx="4393" cy="644" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="86" x="4402" y="647.2104">City(String city)</text><ellipse cx="4393" cy="656.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="101" x="4402" y="660.0151">City of(String city)</text><ellipse cx="4393" cy="669.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="85" x="4402" y="672.8198">String getCity()</text><ellipse cx="4393" cy="682.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="4402" y="685.6245">int hashCode()</text><ellipse cx="4393" cy="695.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="4402" y="698.4292">boolean equals(Object obj)</text><ellipse cx="4393" cy="708.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="4402" y="711.2339">String toString()</text><ellipse cx="4393" cy="720.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="132" x="4402" y="724.0386">int compareTo(City obj)</text><!--MD5=[deb4e1f6eb1e3c1256fdb830f96abfbb] class Country--><rect codeLine="161" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="150.4375" id="Country" style="stroke:#A80036;stroke-width:1.5;" width="208" x="3301" y="1161.5"/><ellipse cx="3376.75" cy="1177.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M3379.7188,1183.1406 Q3379.1406,1183.4375 3378.5,1183.5781 Q3377.8594,1183.7344 3377.1563,1183.7344 Q3374.6563,1183.7344 3373.3281,1182.0938 Q3372.0156,1180.4375 3372.0156,1177.3125 Q3372.0156,1174.1875 3373.3281,1172.5313 Q3374.6563,1170.875 3377.1563,1170.875 Q3377.8594,1170.875 3378.5,1171.0313 Q3379.1563,1171.1875 3379.7188,1171.4844 L3379.7188,1174.2031 Q3379.0938,1173.625 3378.5,1173.3594 Q3377.9063,1173.0781 3377.2813,1173.0781 Q3375.9375,1173.0781 3375.25,1174.1563 Q3374.5625,1175.2188 3374.5625,1177.3125 Q3374.5625,1179.4063 3375.25,1180.4844 Q3375.9375,1181.5469 3377.2813,1181.5469 Q3377.9063,1181.5469 3378.5,1181.2813 Q3379.0938,1181 3379.7188,1180.4219 L3379.7188,1183.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="48" x="3397.25" y="1181.6543">Country</text><line style="stroke:#A80036;stroke-width:1.5;" x1="3302" x2="3508" y1="1193.5" y2="1193.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="3302" x2="3508" y1="1201.5" y2="1201.5"/><ellipse cx="3312" cy="1212.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="128" x="3321" y="1215.7104">Country(String alpha2)</text><ellipse cx="3312" cy="1225.3047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="143" x="3321" y="1228.5151">Country of(String alpha2)</text><ellipse cx="3312" cy="1238.1094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="108" x="3321" y="1241.3198">String getCountry()</text><ellipse cx="3312" cy="1250.9141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="182" x="3321" y="1254.1245">String getEnglishCountryName()</text><ellipse cx="3312" cy="1263.7188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="3321" y="1266.9292">int hashCode()</text><ellipse cx="3312" cy="1276.5234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="3321" y="1279.7339">boolean equals(Object obj)</text><ellipse cx="3312" cy="1289.3281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="3321" y="1292.5386">String toString()</text><ellipse cx="3312" cy="1302.1328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="155" x="3321" y="1305.3433">int compareTo(Country obj)</text><!--MD5=[47cb5ffa569d3b373fc939939c2ef199] class Currency--><rect codeLine="172" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="Currency" style="stroke:#A80036;stroke-width:1.5;" width="188" x="4595" y="593"/><ellipse cx="4657.25" cy="609" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M4660.2188,614.6406 Q4659.6406,614.9375 4659,615.0781 Q4658.3594,615.2344 4657.6563,615.2344 Q4655.1563,615.2344 4653.8281,613.5938 Q4652.5156,611.9375 4652.5156,608.8125 Q4652.5156,605.6875 4653.8281,604.0313 Q4655.1563,602.375 4657.6563,602.375 Q4658.3594,602.375 4659,602.5313 Q4659.6563,602.6875 4660.2188,602.9844 L4660.2188,605.7031 Q4659.5938,605.125 4659,604.8594 Q4658.4063,604.5781 4657.7813,604.5781 Q4656.4375,604.5781 4655.75,605.6563 Q4655.0625,606.7188 4655.0625,608.8125 Q4655.0625,610.9063 4655.75,611.9844 Q4656.4375,613.0469 4657.7813,613.0469 Q4658.4063,613.0469 4659,612.7813 Q4659.5938,612.5 4660.2188,611.9219 L4660.2188,614.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="55" x="4677.75" y="613.1543">Currency</text><line style="stroke:#A80036;stroke-width:1.5;" x1="4596" x2="4782" y1="625" y2="625"/><line style="stroke:#A80036;stroke-width:1.5;" x1="4596" x2="4782" y1="633" y2="633"/><ellipse cx="4606" cy="644" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="124" x="4615" y="647.2104">Currency(String code)</text><ellipse cx="4606" cy="656.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="139" x="4615" y="660.0151">Currency of(String code)</text><ellipse cx="4606" cy="669.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="115" x="4615" y="672.8198">String getCurrency()</text><ellipse cx="4606" cy="682.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="4615" y="685.6245">int hashCode()</text><ellipse cx="4606" cy="695.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="4615" y="698.4292">boolean equals(Object obj)</text><ellipse cx="4606" cy="708.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="4615" y="711.2339">String toString()</text><ellipse cx="4606" cy="720.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="162" x="4615" y="724.0386">int compareTo(Currency obj)</text><!--MD5=[cff4d1dfabf1e80e04b31c5c669534b5] class Day--><rect codeLine="182" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="Day" style="stroke:#A80036;stroke-width:1.5;" width="178" x="4818" y="593"/><ellipse cx="4891.25" cy="609" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M4894.2188,614.6406 Q4893.6406,614.9375 4893,615.0781 Q4892.3594,615.2344 4891.6563,615.2344 Q4889.1563,615.2344 4887.8281,613.5938 Q4886.5156,611.9375 4886.5156,608.8125 Q4886.5156,605.6875 4887.8281,604.0313 Q4889.1563,602.375 4891.6563,602.375 Q4892.3594,602.375 4893,602.5313 Q4893.6563,602.6875 4894.2188,602.9844 L4894.2188,605.7031 Q4893.5938,605.125 4893,604.8594 Q4892.4063,604.5781 4891.7813,604.5781 Q4890.4375,604.5781 4889.75,605.6563 Q4889.0625,606.7188 4889.0625,608.8125 Q4889.0625,610.9063 4889.75,611.9844 Q4890.4375,613.0469 4891.7813,613.0469 Q4892.4063,613.0469 4893,612.7813 Q4893.5938,612.5 4894.2188,611.9219 L4894.2188,614.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="23" x="4911.75" y="613.1543">Day</text><line style="stroke:#A80036;stroke-width:1.5;" x1="4819" x2="4995" y1="625" y2="625"/><line style="stroke:#A80036;stroke-width:1.5;" x1="4819" x2="4995" y1="633" y2="633"/><ellipse cx="4829" cy="644" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="67" x="4838" y="647.2104">Day(int day)</text><ellipse cx="4829" cy="656.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="82" x="4838" y="660.0151">Day of(int day)</text><ellipse cx="4829" cy="669.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="65" x="4838" y="672.8198">int getDay()</text><ellipse cx="4829" cy="682.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="4838" y="685.6245">int hashCode()</text><ellipse cx="4829" cy="695.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="4838" y="698.4292">boolean equals(Object obj)</text><ellipse cx="4829" cy="708.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="4838" y="711.2339">String toString()</text><ellipse cx="4829" cy="720.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="132" x="4838" y="724.0386">int compareTo(Day obj)</text><!--MD5=[ada87c1b6b1db915d6b739d58cabb54e] class Days--><rect codeLine="192" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="Days" style="stroke:#A80036;stroke-width:1.5;" width="178" x="3545" y="906"/><ellipse cx="3614.75" cy="922" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M3617.7188,927.6406 Q3617.1406,927.9375 3616.5,928.0781 Q3615.8594,928.2344 3615.1563,928.2344 Q3612.6563,928.2344 3611.3281,926.5938 Q3610.0156,924.9375 3610.0156,921.8125 Q3610.0156,918.6875 3611.3281,917.0313 Q3612.6563,915.375 3615.1563,915.375 Q3615.8594,915.375 3616.5,915.5313 Q3617.1563,915.6875 3617.7188,915.9844 L3617.7188,918.7031 Q3617.0938,918.125 3616.5,917.8594 Q3615.9063,917.5781 3615.2813,917.5781 Q3613.9375,917.5781 3613.25,918.6563 Q3612.5625,919.7188 3612.5625,921.8125 Q3612.5625,923.9063 3613.25,924.9844 Q3613.9375,926.0469 3615.2813,926.0469 Q3615.9063,926.0469 3616.5,925.7813 Q3617.0938,925.5 3617.7188,924.9219 L3617.7188,927.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="30" x="3635.25" y="926.1543">Days</text><line style="stroke:#A80036;stroke-width:1.5;" x1="3546" x2="3722" y1="938" y2="938"/><line style="stroke:#A80036;stroke-width:1.5;" x1="3546" x2="3722" y1="946" y2="946"/><ellipse cx="3556" cy="957" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="3565" y="960.2104">Days(long days)</text><ellipse cx="3556" cy="969.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="106" x="3565" y="973.0151">Days of(long days)</text><ellipse cx="3556" cy="982.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="82" x="3565" y="985.8198">long getDays()</text><ellipse cx="3556" cy="995.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="3565" y="998.6245">int hashCode()</text><ellipse cx="3556" cy="1008.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="3565" y="1011.4292">boolean equals(Object obj)</text><ellipse cx="3556" cy="1021.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="3565" y="1024.2339">String toString()</text><ellipse cx="3556" cy="1033.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="139" x="3565" y="1037.0386">int compareTo(Days obj)</text><!--MD5=[c50d89439a12e948b363c4efab1c487c] class Department--><rect codeLine="202" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="Department" style="stroke:#A80036;stroke-width:1.5;" width="220" x="2347" y="1167.5"/><ellipse cx="2415.25" cy="1183.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M2418.2188,1189.1406 Q2417.6406,1189.4375 2417,1189.5781 Q2416.3594,1189.7344 2415.6563,1189.7344 Q2413.1563,1189.7344 2411.8281,1188.0938 Q2410.5156,1186.4375 2410.5156,1183.3125 Q2410.5156,1180.1875 2411.8281,1178.5313 Q2413.1563,1176.875 2415.6563,1176.875 Q2416.3594,1176.875 2417,1177.0313 Q2417.6563,1177.1875 2418.2188,1177.4844 L2418.2188,1180.2031 Q2417.5938,1179.625 2417,1179.3594 Q2416.4063,1179.0781 2415.7813,1179.0781 Q2414.4375,1179.0781 2413.75,1180.1563 Q2413.0625,1181.2188 2413.0625,1183.3125 Q2413.0625,1185.4063 2413.75,1186.4844 Q2414.4375,1187.5469 2415.7813,1187.5469 Q2416.4063,1187.5469 2417,1187.2813 Q2417.5938,1187 2418.2188,1186.4219 L2418.2188,1189.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="75" x="2435.75" y="1187.6543">Department</text><line style="stroke:#A80036;stroke-width:1.5;" x1="2348" x2="2566" y1="1199.5" y2="1199.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="2348" x2="2566" y1="1207.5" y2="1207.5"/><ellipse cx="2358" cy="1218.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="179" x="2367" y="1221.7104">Department(String department)</text><ellipse cx="2358" cy="1231.3047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="194" x="2367" y="1234.5151">Department of(String department)</text><ellipse cx="2358" cy="1244.1094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="131" x="2367" y="1247.3198">String getDepartment()</text><ellipse cx="2358" cy="1256.9141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="2367" y="1260.1245">int hashCode()</text><ellipse cx="2358" cy="1269.7188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="2367" y="1272.9292">boolean equals(Object obj)</text><ellipse cx="2358" cy="1282.5234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="2367" y="1285.7339">String toString()</text><ellipse cx="2358" cy="1295.3281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="178" x="2367" y="1298.5386">int compareTo(Department obj)</text><!--MD5=[7f9fad07911429595505a023a20b44b6] class DisplayAspectRatio--><rect codeLine="212" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="150.4375" id="DisplayAspectRatio" style="stroke:#A80036;stroke-width:1.5;" width="244" x="3758" y="900"/><ellipse cx="3816.25" cy="916" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M3819.2188,921.6406 Q3818.6406,921.9375 3818,922.0781 Q3817.3594,922.2344 3816.6563,922.2344 Q3814.1563,922.2344 3812.8281,920.5938 Q3811.5156,918.9375 3811.5156,915.8125 Q3811.5156,912.6875 3812.8281,911.0313 Q3814.1563,909.375 3816.6563,909.375 Q3817.3594,909.375 3818,909.5313 Q3818.6563,909.6875 3819.2188,909.9844 L3819.2188,912.7031 Q3818.5938,912.125 3818,911.8594 Q3817.4063,911.5781 3816.7813,911.5781 Q3815.4375,911.5781 3814.75,912.6563 Q3814.0625,913.7188 3814.0625,915.8125 Q3814.0625,917.9063 3814.75,918.9844 Q3815.4375,920.0469 3816.7813,920.0469 Q3817.4063,920.0469 3818,919.7813 Q3818.5938,919.5 3819.2188,918.9219 L3819.2188,921.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="119" x="3836.75" y="920.1543">DisplayAspectRatio</text><line style="stroke:#A80036;stroke-width:1.5;" x1="3759" x2="4001" y1="932" y2="932"/><line style="stroke:#A80036;stroke-width:1.5;" x1="3759" x2="4001" y1="940" y2="940"/><ellipse cx="3769" cy="951" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="171" x="3778" y="954.2104">DisplayAspectRatio(int x, int y)</text><ellipse cx="3769" cy="963.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="186" x="3778" y="967.0151">DisplayAspectRatio of(int x, int y)</text><ellipse cx="3769" cy="976.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="51" x="3778" y="979.8198">int getX()</text><ellipse cx="3769" cy="989.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="51" x="3778" y="992.6245">int getY()</text><ellipse cx="3769" cy="1002.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="130" x="3778" y="1005.4292">String getAspectRatio()</text><ellipse cx="3769" cy="1015.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="3778" y="1018.2339">int hashCode()</text><ellipse cx="3769" cy="1027.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="3778" y="1031.0386">boolean equals(Object obj)</text><ellipse cx="3769" cy="1040.6328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="218" x="3778" y="1043.8433">int compareTo(DisplayAspectRatio obj)</text><!--MD5=[c4d681900983498091bbbc67674786ba] class District--><rect codeLine="223" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="District" style="stroke:#A80036;stroke-width:1.5;" width="178" x="2602" y="1167.5"/><ellipse cx="2664.75" cy="1183.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M2667.7188,1189.1406 Q2667.1406,1189.4375 2666.5,1189.5781 Q2665.8594,1189.7344 2665.1563,1189.7344 Q2662.6563,1189.7344 2661.3281,1188.0938 Q2660.0156,1186.4375 2660.0156,1183.3125 Q2660.0156,1180.1875 2661.3281,1178.5313 Q2662.6563,1176.875 2665.1563,1176.875 Q2665.8594,1176.875 2666.5,1177.0313 Q2667.1563,1177.1875 2667.7188,1177.4844 L2667.7188,1180.2031 Q2667.0938,1179.625 2666.5,1179.3594 Q2665.9063,1179.0781 2665.2813,1179.0781 Q2663.9375,1179.0781 2663.25,1180.1563 Q2662.5625,1181.2188 2662.5625,1183.3125 Q2662.5625,1185.4063 2663.25,1186.4844 Q2663.9375,1187.5469 2665.2813,1187.5469 Q2665.9063,1187.5469 2666.5,1187.2813 Q2667.0938,1187 2667.7188,1186.4219 L2667.7188,1189.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="44" x="2685.25" y="1187.6543">District</text><line style="stroke:#A80036;stroke-width:1.5;" x1="2603" x2="2779" y1="1199.5" y2="1199.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="2603" x2="2779" y1="1207.5" y2="1207.5"/><ellipse cx="2613" cy="1218.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="125" x="2622" y="1221.7104">District(String district)</text><ellipse cx="2613" cy="1231.3047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="140" x="2622" y="1234.5151">District of(String district)</text><ellipse cx="2613" cy="1244.1094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="104" x="2622" y="1247.3198">String getDistrict()</text><ellipse cx="2613" cy="1256.9141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="2622" y="1260.1245">int hashCode()</text><ellipse cx="2613" cy="1269.7188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="2622" y="1272.9292">boolean equals(Object obj)</text><ellipse cx="2613" cy="1282.5234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="2622" y="1285.7339">String toString()</text><ellipse cx="2613" cy="1295.3281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="151" x="2622" y="1298.5386">int compareTo(District obj)</text><!--MD5=[a7ee7014b238296adf0bba8f86901b8e] class EMail--><rect codeLine="233" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="EMail" style="stroke:#A80036;stroke-width:1.5;" width="178" x="5031" y="593"/><ellipse cx="5099.75" cy="609" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M5102.7188,614.6406 Q5102.1406,614.9375 5101.5,615.0781 Q5100.8594,615.2344 5100.1563,615.2344 Q5097.6563,615.2344 5096.3281,613.5938 Q5095.0156,611.9375 5095.0156,608.8125 Q5095.0156,605.6875 5096.3281,604.0313 Q5097.6563,602.375 5100.1563,602.375 Q5100.8594,602.375 5101.5,602.5313 Q5102.1563,602.6875 5102.7188,602.9844 L5102.7188,605.7031 Q5102.0938,605.125 5101.5,604.8594 Q5100.9063,604.5781 5100.2813,604.5781 Q5098.9375,604.5781 5098.25,605.6563 Q5097.5625,606.7188 5097.5625,608.8125 Q5097.5625,610.9063 5098.25,611.9844 Q5098.9375,613.0469 5100.2813,613.0469 Q5100.9063,613.0469 5101.5,612.7813 Q5102.0938,612.5 5102.7188,611.9219 L5102.7188,614.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="32" x="5120.25" y="613.1543">EMail</text><line style="stroke:#A80036;stroke-width:1.5;" x1="5032" x2="5208" y1="625" y2="625"/><line style="stroke:#A80036;stroke-width:1.5;" x1="5032" x2="5208" y1="633" y2="633"/><ellipse cx="5042" cy="644" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="106" x="5051" y="647.2104">EMail(String email)</text><ellipse cx="5042" cy="656.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="121" x="5051" y="660.0151">EMail of(String email)</text><ellipse cx="5042" cy="669.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="93" x="5051" y="672.8198">String getEMail()</text><ellipse cx="5042" cy="682.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="5051" y="685.6245">int hashCode()</text><ellipse cx="5042" cy="695.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="5051" y="698.4292">boolean equals(Object obj)</text><ellipse cx="5042" cy="708.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="5051" y="711.2339">String toString()</text><ellipse cx="5042" cy="720.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="140" x="5051" y="724.0386">int compareTo(EMail obj)</text><!--MD5=[8a470235769dd94d5cbf0f6d7d1107e0] class Firstname--><rect codeLine="243" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="Firstname" style="stroke:#A80036;stroke-width:1.5;" width="199" x="3336.5" y="593"/><ellipse cx="3400.75" cy="609" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M3403.7188,614.6406 Q3403.1406,614.9375 3402.5,615.0781 Q3401.8594,615.2344 3401.1563,615.2344 Q3398.6563,615.2344 3397.3281,613.5938 Q3396.0156,611.9375 3396.0156,608.8125 Q3396.0156,605.6875 3397.3281,604.0313 Q3398.6563,602.375 3401.1563,602.375 Q3401.8594,602.375 3402.5,602.5313 Q3403.1563,602.6875 3403.7188,602.9844 L3403.7188,605.7031 Q3403.0938,605.125 3402.5,604.8594 Q3401.9063,604.5781 3401.2813,604.5781 Q3399.9375,604.5781 3399.25,605.6563 Q3398.5625,606.7188 3398.5625,608.8125 Q3398.5625,610.9063 3399.25,611.9844 Q3399.9375,613.0469 3401.2813,613.0469 Q3401.9063,613.0469 3402.5,612.7813 Q3403.0938,612.5 3403.7188,611.9219 L3403.7188,614.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="62" x="3421.25" y="613.1543">Firstname</text><line style="stroke:#A80036;stroke-width:1.5;" x1="3337.5" x2="3534.5" y1="625" y2="625"/><line style="stroke:#A80036;stroke-width:1.5;" x1="3337.5" x2="3534.5" y1="633" y2="633"/><ellipse cx="3347.5" cy="644" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="158" x="3356.5" y="647.2104">Firstname(String firstname)</text><ellipse cx="3347.5" cy="656.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="173" x="3356.5" y="660.0151">Firstname of(String firstname)</text><ellipse cx="3347.5" cy="669.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="121" x="3356.5" y="672.8198">String getFirstname()</text><ellipse cx="3347.5" cy="682.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="3356.5" y="685.6245">int hashCode()</text><ellipse cx="3347.5" cy="695.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="3356.5" y="698.4292">boolean equals(Object obj)</text><ellipse cx="3347.5" cy="708.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="3356.5" y="711.2339">String toString()</text><ellipse cx="3347.5" cy="720.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="168" x="3356.5" y="724.0386">int compareTo(Firstname obj)</text><!--MD5=[a4ea2dcb44ebd57046df9af95d8b8c12] class Gender--><rect codeLine="253" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="73.6094" id="Gender" style="stroke:#A80036;stroke-width:1.5;" width="128" x="3173" y="625"/><ellipse cx="3210.5" cy="641" fill="#EB937F" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M3214.6094,647 L3206.8906,647 L3206.8906,634.6094 L3214.6094,634.6094 L3214.6094,636.7656 L3209.3438,636.7656 L3209.3438,639.4375 L3214.1094,639.4375 L3214.1094,641.5938 L3209.3438,641.5938 L3209.3438,644.8438 L3214.6094,644.8438 L3214.6094,647 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="46" x="3229.5" y="645.1543">Gender</text><line style="stroke:#A80036;stroke-width:1.5;" x1="3174" x2="3300" y1="657" y2="657"/><line style="stroke:#A80036;stroke-width:1.5;" x1="3174" x2="3300" y1="665" y2="665"/><ellipse cx="3184" cy="676" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="102" x="3193" y="679.2104">Gender(int action)</text><ellipse cx="3184" cy="688.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="78" x="3193" y="692.0151">int getAction()</text><!--MD5=[cc0e52e17a6b433831b4ad8b52fecad1] class GregorianCalendar--><rect codeLine="258" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="163.2422" id="GregorianCalendar" style="stroke:#A80036;stroke-width:1.5;" width="260" x="3245" y="893.5"/><ellipse cx="3311.75" cy="909.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M3314.7188,915.1406 Q3314.1406,915.4375 3313.5,915.5781 Q3312.8594,915.7344 3312.1563,915.7344 Q3309.6563,915.7344 3308.3281,914.0938 Q3307.0156,912.4375 3307.0156,909.3125 Q3307.0156,906.1875 3308.3281,904.5313 Q3309.6563,902.875 3312.1563,902.875 Q3312.8594,902.875 3313.5,903.0313 Q3314.1563,903.1875 3314.7188,903.4844 L3314.7188,906.2031 Q3314.0938,905.625 3313.5,905.3594 Q3312.9063,905.0781 3312.2813,905.0781 Q3310.9375,905.0781 3310.25,906.1563 Q3309.5625,907.2188 3309.5625,909.3125 Q3309.5625,911.4063 3310.25,912.4844 Q3310.9375,913.5469 3312.2813,913.5469 Q3312.9063,913.5469 3313.5,913.2813 Q3314.0938,913 3314.7188,912.4219 L3314.7188,915.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="118" x="3332.25" y="913.6543">GregorianCalendar</text><line style="stroke:#A80036;stroke-width:1.5;" x1="3246" x2="3504" y1="925.5" y2="925.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="3246" x2="3504" y1="933.5" y2="933.5"/><ellipse cx="3256" cy="944.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="206" x="3265" y="947.7104">GregorianCalendar(Country country)</text><ellipse cx="3256" cy="957.3047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="221" x="3265" y="960.5151">GregorianCalendar of(Country country)</text><ellipse cx="3256" cy="970.1094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="118" x="3265" y="973.3198">Country getCountry()</text><ellipse cx="3256" cy="982.9141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="3265" y="986.1245">int hashCode()</text><ellipse cx="3256" cy="995.7188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="3265" y="998.9292">boolean equals(Object obj)</text><ellipse cx="3256" cy="1008.5234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="3265" y="1011.7339">String toString()</text><ellipse cx="3256" cy="1021.3281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="219" x="3265" y="1024.5386">int compareTo(GregorianCalendar obj)</text><ellipse cx="3256" cy="1034.1328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="175" x="3265" y="1037.3433">boolean isLeapYear(Year year)</text><ellipse cx="3256" cy="1046.9375" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="234" x="3265" y="1050.1479">int daysInMonth(Year year, Month month)</text><!--MD5=[3fdcb75a4562b98772f6d72acf533fbc] class GregorianDate--><rect codeLine="270" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="163.2422" id="GregorianDate" style="stroke:#A80036;stroke-width:1.5;" width="491" x="2433.5" y="580.5"/><ellipse cx="2628.75" cy="596.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M2631.7188,602.1406 Q2631.1406,602.4375 2630.5,602.5781 Q2629.8594,602.7344 2629.1563,602.7344 Q2626.6563,602.7344 2625.3281,601.0938 Q2624.0156,599.4375 2624.0156,596.3125 Q2624.0156,593.1875 2625.3281,591.5313 Q2626.6563,589.875 2629.1563,589.875 Q2629.8594,589.875 2630.5,590.0313 Q2631.1563,590.1875 2631.7188,590.4844 L2631.7188,593.2031 Q2631.0938,592.625 2630.5,592.3594 Q2629.9063,592.0781 2629.2813,592.0781 Q2627.9375,592.0781 2627.25,593.1563 Q2626.5625,594.2188 2626.5625,596.3125 Q2626.5625,598.4063 2627.25,599.4844 Q2627.9375,600.5469 2629.2813,600.5469 Q2629.9063,600.5469 2630.5,600.2813 Q2631.0938,600 2631.7188,599.4219 L2631.7188,602.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="92" x="2649.25" y="600.6543">GregorianDate</text><line style="stroke:#A80036;stroke-width:1.5;" x1="2434.5" x2="2923.5" y1="612.5" y2="612.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="2434.5" x2="2923.5" y1="620.5" y2="620.5"/><ellipse cx="2444.5" cy="631.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="450" x="2453.5" y="634.7104">GregorianDate(GregorianCalendar calendar, Year year, Month month, Day day)</text><ellipse cx="2444.5" cy="644.3047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="465" x="2453.5" y="647.5151">GregorianDate of(GregorianCalendar calendar, Year year, Month month, Day day)</text><ellipse cx="2444.5" cy="657.1094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="296" x="2453.5" y="660.3198">GregorianDate of(Year year, Month month, Day day)</text><ellipse cx="2444.5" cy="669.9141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="90" x="2453.5" y="673.1245">String getDate()</text><ellipse cx="2444.5" cy="682.7188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="2453.5" y="685.9292">int hashCode()</text><ellipse cx="2444.5" cy="695.5234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="2453.5" y="698.7339">boolean equals(Object obj)</text><ellipse cx="2444.5" cy="708.3281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="2453.5" y="711.5386">String toString()</text><ellipse cx="2444.5" cy="721.1328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="194" x="2453.5" y="724.3433">int compareTo(GregorianDate obj)</text><ellipse cx="2444.5" cy="733.9375" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="356" x="2453.5" y="737.1479">GregorianDate easter(GregorianCalendar calendar, Year year)</text><!--MD5=[4ae6a8014bc14d660f3b33ab6284bfe9] class Hostname--><rect codeLine="282" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="150.4375" id="Hostname" style="stroke:#A80036;stroke-width:1.5;" width="202" x="32" y="587"/><ellipse cx="96.75" cy="603" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M99.7188,608.6406 Q99.1406,608.9375 98.5,609.0781 Q97.8594,609.2344 97.1563,609.2344 Q94.6563,609.2344 93.3281,607.5938 Q92.0156,605.9375 92.0156,602.8125 Q92.0156,599.6875 93.3281,598.0313 Q94.6563,596.375 97.1563,596.375 Q97.8594,596.375 98.5,596.5313 Q99.1563,596.6875 99.7188,596.9844 L99.7188,599.7031 Q99.0938,599.125 98.5,598.8594 Q97.9063,598.5781 97.2813,598.5781 Q95.9375,598.5781 95.25,599.6563 Q94.5625,600.7188 94.5625,602.8125 Q94.5625,604.9063 95.25,605.9844 Q95.9375,607.0469 97.2813,607.0469 Q97.9063,607.0469 98.5,606.7813 Q99.0938,606.5 99.7188,605.9219 L99.7188,608.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="64" x="117.25" y="607.1543">Hostname</text><line style="stroke:#A80036;stroke-width:1.5;" x1="33" x2="233" y1="619" y2="619"/><line style="stroke:#A80036;stroke-width:1.5;" x1="33" x2="233" y1="627" y2="627"/><ellipse cx="43" cy="638" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="161" x="52" y="641.2104">Hostname(String hostname)</text><ellipse cx="43" cy="650.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="176" x="52" y="654.0151">Hostname of(String hostname)</text><ellipse cx="43" cy="663.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="122" x="52" y="666.8198">String getHostname()</text><ellipse cx="43" cy="676.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="84" x="52" y="679.6245">boolean exist()</text><ellipse cx="43" cy="689.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="52" y="692.4292">int hashCode()</text><ellipse cx="43" cy="702.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="52" y="705.2339">boolean equals(Object obj)</text><ellipse cx="43" cy="714.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="52" y="718.0386">String toString()</text><ellipse cx="43" cy="727.6328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="169" x="52" y="730.8433">int compareTo(Hostname obj)</text><!--MD5=[07f9ab048ff6ac593b30ecc873c3e795] class Hour--><rect codeLine="293" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="Hour" style="stroke:#A80036;stroke-width:1.5;" width="178" x="4037" y="906"/><ellipse cx="4106.75" cy="922" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M4109.7188,927.6406 Q4109.1406,927.9375 4108.5,928.0781 Q4107.8594,928.2344 4107.1563,928.2344 Q4104.6563,928.2344 4103.3281,926.5938 Q4102.0156,924.9375 4102.0156,921.8125 Q4102.0156,918.6875 4103.3281,917.0313 Q4104.6563,915.375 4107.1563,915.375 Q4107.8594,915.375 4108.5,915.5313 Q4109.1563,915.6875 4109.7188,915.9844 L4109.7188,918.7031 Q4109.0938,918.125 4108.5,917.8594 Q4107.9063,917.5781 4107.2813,917.5781 Q4105.9375,917.5781 4105.25,918.6563 Q4104.5625,919.7188 4104.5625,921.8125 Q4104.5625,923.9063 4105.25,924.9844 Q4105.9375,926.0469 4107.2813,926.0469 Q4107.9063,926.0469 4108.5,925.7813 Q4109.0938,925.5 4109.7188,924.9219 L4109.7188,927.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="30" x="4127.25" y="926.1543">Hour</text><line style="stroke:#A80036;stroke-width:1.5;" x1="4038" x2="4214" y1="938" y2="938"/><line style="stroke:#A80036;stroke-width:1.5;" x1="4038" x2="4214" y1="946" y2="946"/><ellipse cx="4048" cy="957" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="79" x="4057" y="960.2104">Hour(int hour)</text><ellipse cx="4048" cy="969.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="94" x="4057" y="973.0151">Hour of(int hour)</text><ellipse cx="4048" cy="982.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="71" x="4057" y="985.8198">int getHour()</text><ellipse cx="4048" cy="995.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="4057" y="998.6245">int hashCode()</text><ellipse cx="4048" cy="1008.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="4057" y="1011.4292">boolean equals(Object obj)</text><ellipse cx="4048" cy="1021.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="4057" y="1024.2339">String toString()</text><ellipse cx="4048" cy="1033.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="138" x="4057" y="1037.0386">int compareTo(Hour obj)</text><!--MD5=[c54a0d1f3f27e58e896b597ef350dd14] class Hours--><rect codeLine="303" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="Hours" style="stroke:#A80036;stroke-width:1.5;" width="178" x="4250" y="906"/><ellipse cx="4316.25" cy="922" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M4319.2188,927.6406 Q4318.6406,927.9375 4318,928.0781 Q4317.3594,928.2344 4316.6563,928.2344 Q4314.1563,928.2344 4312.8281,926.5938 Q4311.5156,924.9375 4311.5156,921.8125 Q4311.5156,918.6875 4312.8281,917.0313 Q4314.1563,915.375 4316.6563,915.375 Q4317.3594,915.375 4318,915.5313 Q4318.6563,915.6875 4319.2188,915.9844 L4319.2188,918.7031 Q4318.5938,918.125 4318,917.8594 Q4317.4063,917.5781 4316.7813,917.5781 Q4315.4375,917.5781 4314.75,918.6563 Q4314.0625,919.7188 4314.0625,921.8125 Q4314.0625,923.9063 4314.75,924.9844 Q4315.4375,926.0469 4316.7813,926.0469 Q4317.4063,926.0469 4318,925.7813 Q4318.5938,925.5 4319.2188,924.9219 L4319.2188,927.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="37" x="4336.75" y="926.1543">Hours</text><line style="stroke:#A80036;stroke-width:1.5;" x1="4251" x2="4427" y1="938" y2="938"/><line style="stroke:#A80036;stroke-width:1.5;" x1="4251" x2="4427" y1="946" y2="946"/><ellipse cx="4261" cy="957" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="103" x="4270" y="960.2104">Hours(long hours)</text><ellipse cx="4261" cy="969.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="118" x="4270" y="973.0151">Hours of(long hours)</text><ellipse cx="4261" cy="982.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="88" x="4270" y="985.8198">long getHours()</text><ellipse cx="4261" cy="995.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="4270" y="998.6245">int hashCode()</text><ellipse cx="4261" cy="1008.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="4270" y="1011.4292">boolean equals(Object obj)</text><ellipse cx="4261" cy="1021.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="4270" y="1024.2339">String toString()</text><ellipse cx="4261" cy="1033.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="145" x="4270" y="1037.0386">int compareTo(Hours obj)</text><!--MD5=[eac76c7a22bf1c2ec62715663386c385] class IBAN--><rect codeLine="313" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="IBAN" style="stroke:#A80036;stroke-width:1.5;" width="178" x="5431" y="906"/><ellipse cx="5501.75" cy="922" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M5504.7188,927.6406 Q5504.1406,927.9375 5503.5,928.0781 Q5502.8594,928.2344 5502.1563,928.2344 Q5499.6563,928.2344 5498.3281,926.5938 Q5497.0156,924.9375 5497.0156,921.8125 Q5497.0156,918.6875 5498.3281,917.0313 Q5499.6563,915.375 5502.1563,915.375 Q5502.8594,915.375 5503.5,915.5313 Q5504.1563,915.6875 5504.7188,915.9844 L5504.7188,918.7031 Q5504.0938,918.125 5503.5,917.8594 Q5502.9063,917.5781 5502.2813,917.5781 Q5500.9375,917.5781 5500.25,918.6563 Q5499.5625,919.7188 5499.5625,921.8125 Q5499.5625,923.9063 5500.25,924.9844 Q5500.9375,926.0469 5502.2813,926.0469 Q5502.9063,926.0469 5503.5,925.7813 Q5504.0938,925.5 5504.7188,924.9219 L5504.7188,927.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="28" x="5522.25" y="926.1543">IBAN</text><line style="stroke:#A80036;stroke-width:1.5;" x1="5432" x2="5608" y1="938" y2="938"/><line style="stroke:#A80036;stroke-width:1.5;" x1="5432" x2="5608" y1="946" y2="946"/><ellipse cx="5442" cy="957" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="96" x="5451" y="960.2104">IBAN(String iban)</text><ellipse cx="5442" cy="969.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="111" x="5451" y="973.0151">IBAN of(String iban)</text><ellipse cx="5442" cy="982.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="90" x="5451" y="985.8198">String getIBAN()</text><ellipse cx="5442" cy="995.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="5451" y="998.6245">int hashCode()</text><ellipse cx="5442" cy="1008.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="5451" y="1011.4292">boolean equals(Object obj)</text><ellipse cx="5442" cy="1021.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="5451" y="1024.2339">String toString()</text><ellipse cx="5442" cy="1033.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="137" x="5451" y="1037.0386">int compareTo(IBAN obj)</text><!--MD5=[554c97c571db99bba28f6e78d6e3da82] class IPV4Address--><rect codeLine="323" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="176.0469" id="IPV4Address" style="stroke:#A80036;stroke-width:1.5;" width="208" x="32" y="1148.5"/><ellipse cx="92.75" cy="1164.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M95.7188,1170.1406 Q95.1406,1170.4375 94.5,1170.5781 Q93.8594,1170.7344 93.1563,1170.7344 Q90.6563,1170.7344 89.3281,1169.0938 Q88.0156,1167.4375 88.0156,1164.3125 Q88.0156,1161.1875 89.3281,1159.5313 Q90.6563,1157.875 93.1563,1157.875 Q93.8594,1157.875 94.5,1158.0313 Q95.1563,1158.1875 95.7188,1158.4844 L95.7188,1161.2031 Q95.0938,1160.625 94.5,1160.3594 Q93.9063,1160.0781 93.2813,1160.0781 Q91.9375,1160.0781 91.25,1161.1563 Q90.5625,1162.2188 90.5625,1164.3125 Q90.5625,1166.4063 91.25,1167.4844 Q91.9375,1168.5469 93.2813,1168.5469 Q93.9063,1168.5469 94.5,1168.2813 Q95.0938,1168 95.7188,1167.4219 L95.7188,1170.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="78" x="113.25" y="1168.6543">IPV4Address</text><line style="stroke:#A80036;stroke-width:1.5;" x1="33" x2="239" y1="1180.5" y2="1180.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="33" x2="239" y1="1188.5" y2="1188.5"/><ellipse cx="43" cy="1199.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="164" x="52" y="1202.7104">IPV4Address(String address)</text><ellipse cx="43" cy="1212.3047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="179" x="52" y="1215.5151">IPV4Address of(String address)</text><ellipse cx="43" cy="1225.1094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="106" x="52" y="1228.3198">boolean isPrivate()</text><ellipse cx="43" cy="1237.9141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="108" x="52" y="1241.1245">boolean isSpecial()</text><ellipse cx="43" cy="1250.7188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="100" x="52" y="1253.9292">boolean isPublic()</text><ellipse cx="43" cy="1263.5234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="111" x="52" y="1266.7339">String getAddress()</text><ellipse cx="43" cy="1276.3281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="52" y="1279.5386">int hashCode()</text><ellipse cx="43" cy="1289.1328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="52" y="1292.3433">boolean equals(Object obj)</text><ellipse cx="43" cy="1301.9375" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="52" y="1305.1479">String toString()</text><ellipse cx="43" cy="1314.7422" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="182" x="52" y="1317.9526">int compareTo(IPV4Address obj)</text><!--MD5=[d7c18d956ca24fdda35d6e7d36c993d2] class IPV4Mask--><rect codeLine="336" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="176.0469" id="IPV4Mask" style="stroke:#A80036;stroke-width:1.5;" width="190" x="4463" y="887"/><ellipse cx="4524.25" cy="903" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M4527.2188,908.6406 Q4526.6406,908.9375 4526,909.0781 Q4525.3594,909.2344 4524.6563,909.2344 Q4522.1563,909.2344 4520.8281,907.5938 Q4519.5156,905.9375 4519.5156,902.8125 Q4519.5156,899.6875 4520.8281,898.0313 Q4522.1563,896.375 4524.6563,896.375 Q4525.3594,896.375 4526,896.5313 Q4526.6563,896.6875 4527.2188,896.9844 L4527.2188,899.7031 Q4526.5938,899.125 4526,898.8594 Q4525.4063,898.5781 4524.7813,898.5781 Q4523.4375,898.5781 4522.75,899.6563 Q4522.0625,900.7188 4522.0625,902.8125 Q4522.0625,904.9063 4522.75,905.9844 Q4523.4375,907.0469 4524.7813,907.0469 Q4525.4063,907.0469 4526,906.7813 Q4526.5938,906.5 4527.2188,905.9219 L4527.2188,908.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="59" x="4544.75" y="907.1543">IPV4Mask</text><line style="stroke:#A80036;stroke-width:1.5;" x1="4464" x2="4652" y1="919" y2="919"/><line style="stroke:#A80036;stroke-width:1.5;" x1="4464" x2="4652" y1="927" y2="927"/><ellipse cx="4474" cy="938" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="114" x="4483" y="941.2104">IPV4Mask(int length)</text><ellipse cx="4474" cy="950.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="130" x="4483" y="954.0151">IPV4Mask(String mask)</text><ellipse cx="4474" cy="963.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="129" x="4483" y="966.8198">IPV4Mask of(int length)</text><ellipse cx="4474" cy="976.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="145" x="4483" y="979.6245">IPV4Mask of(String mask)</text><ellipse cx="4474" cy="989.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="82" x="4483" y="992.4292">int getLength()</text><ellipse cx="4474" cy="1002.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="93" x="4483" y="1005.2339">String getMask()</text><ellipse cx="4474" cy="1014.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="4483" y="1018.0386">int hashCode()</text><ellipse cx="4474" cy="1027.6328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="4483" y="1030.8433">boolean equals(Object obj)</text><ellipse cx="4474" cy="1040.4375" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="4483" y="1043.6479">String toString()</text><ellipse cx="4474" cy="1053.2422" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="164" x="4483" y="1056.4526">int compareTo(IPV4Mask obj)</text><!--MD5=[3b6a119056f8064e3941f39f1e6af77d] class IPV6Address--><rect codeLine="349" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="176.0469" id="IPV6Address" style="stroke:#A80036;stroke-width:1.5;" width="208" x="133" y="887"/><ellipse cx="193.75" cy="903" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M196.7188,908.6406 Q196.1406,908.9375 195.5,909.0781 Q194.8594,909.2344 194.1563,909.2344 Q191.6563,909.2344 190.3281,907.5938 Q189.0156,905.9375 189.0156,902.8125 Q189.0156,899.6875 190.3281,898.0313 Q191.6563,896.375 194.1563,896.375 Q194.8594,896.375 195.5,896.5313 Q196.1563,896.6875 196.7188,896.9844 L196.7188,899.7031 Q196.0938,899.125 195.5,898.8594 Q194.9063,898.5781 194.2813,898.5781 Q192.9375,898.5781 192.25,899.6563 Q191.5625,900.7188 191.5625,902.8125 Q191.5625,904.9063 192.25,905.9844 Q192.9375,907.0469 194.2813,907.0469 Q194.9063,907.0469 195.5,906.7813 Q196.0938,906.5 196.7188,905.9219 L196.7188,908.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="78" x="214.25" y="907.1543">IPV6Address</text><line style="stroke:#A80036;stroke-width:1.5;" x1="134" x2="340" y1="919" y2="919"/><line style="stroke:#A80036;stroke-width:1.5;" x1="134" x2="340" y1="927" y2="927"/><ellipse cx="144" cy="938" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="164" x="153" y="941.2104">IPV6Address(String address)</text><ellipse cx="144" cy="950.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="179" x="153" y="954.0151">IPV6Address of(String address)</text><ellipse cx="144" cy="963.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="106" x="153" y="966.8198">boolean isPrivate()</text><ellipse cx="144" cy="976.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="108" x="153" y="979.6245">boolean isSpecial()</text><ellipse cx="144" cy="989.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="100" x="153" y="992.4292">boolean isPublic()</text><ellipse cx="144" cy="1002.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="111" x="153" y="1005.2339">String getAddress()</text><ellipse cx="144" cy="1014.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="153" y="1018.0386">int hashCode()</text><ellipse cx="144" cy="1027.6328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="153" y="1030.8433">boolean equals(Object obj)</text><ellipse cx="144" cy="1040.4375" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="153" y="1043.6479">String toString()</text><ellipse cx="144" cy="1053.2422" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="182" x="153" y="1056.4526">int compareTo(IPV6Address obj)</text><!--MD5=[d4870a54124a80715c4eea728c206d46] class IPV6Mask--><rect codeLine="362" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="IPV6Mask" style="stroke:#A80036;stroke-width:1.5;" width="190" x="4688" y="906"/><ellipse cx="4749.25" cy="922" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M4752.2188,927.6406 Q4751.6406,927.9375 4751,928.0781 Q4750.3594,928.2344 4749.6563,928.2344 Q4747.1563,928.2344 4745.8281,926.5938 Q4744.5156,924.9375 4744.5156,921.8125 Q4744.5156,918.6875 4745.8281,917.0313 Q4747.1563,915.375 4749.6563,915.375 Q4750.3594,915.375 4751,915.5313 Q4751.6563,915.6875 4752.2188,915.9844 L4752.2188,918.7031 Q4751.5938,918.125 4751,917.8594 Q4750.4063,917.5781 4749.7813,917.5781 Q4748.4375,917.5781 4747.75,918.6563 Q4747.0625,919.7188 4747.0625,921.8125 Q4747.0625,923.9063 4747.75,924.9844 Q4748.4375,926.0469 4749.7813,926.0469 Q4750.4063,926.0469 4751,925.7813 Q4751.5938,925.5 4752.2188,924.9219 L4752.2188,927.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="59" x="4769.75" y="926.1543">IPV6Mask</text><line style="stroke:#A80036;stroke-width:1.5;" x1="4689" x2="4877" y1="938" y2="938"/><line style="stroke:#A80036;stroke-width:1.5;" x1="4689" x2="4877" y1="946" y2="946"/><ellipse cx="4699" cy="957" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="114" x="4708" y="960.2104">IPV6Mask(int length)</text><ellipse cx="4699" cy="969.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="129" x="4708" y="973.0151">IPV6Mask of(int length)</text><ellipse cx="4699" cy="982.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="82" x="4708" y="985.8198">int getLength()</text><ellipse cx="4699" cy="995.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="4708" y="998.6245">int hashCode()</text><ellipse cx="4699" cy="1008.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="4708" y="1011.4292">boolean equals(Object obj)</text><ellipse cx="4699" cy="1021.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="4708" y="1024.2339">String toString()</text><ellipse cx="4699" cy="1033.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="164" x="4708" y="1037.0386">int compareTo(IPV6Mask obj)</text><!--MD5=[604575fdb45ee3504bf55618cb71a1d3] class Language--><rect codeLine="372" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="Language" style="stroke:#A80036;stroke-width:1.5;" width="192" x="3544" y="1167.5"/><ellipse cx="3604.75" cy="1183.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M3607.7188,1189.1406 Q3607.1406,1189.4375 3606.5,1189.5781 Q3605.8594,1189.7344 3605.1563,1189.7344 Q3602.6563,1189.7344 3601.3281,1188.0938 Q3600.0156,1186.4375 3600.0156,1183.3125 Q3600.0156,1180.1875 3601.3281,1178.5313 Q3602.6563,1176.875 3605.1563,1176.875 Q3605.8594,1176.875 3606.5,1177.0313 Q3607.1563,1177.1875 3607.7188,1177.4844 L3607.7188,1180.2031 Q3607.0938,1179.625 3606.5,1179.3594 Q3605.9063,1179.0781 3605.2813,1179.0781 Q3603.9375,1179.0781 3603.25,1180.1563 Q3602.5625,1181.2188 3602.5625,1183.3125 Q3602.5625,1185.4063 3603.25,1186.4844 Q3603.9375,1187.5469 3605.2813,1187.5469 Q3605.9063,1187.5469 3606.5,1187.2813 Q3607.0938,1187 3607.7188,1186.4219 L3607.7188,1189.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="62" x="3625.25" y="1187.6543">Language</text><line style="stroke:#A80036;stroke-width:1.5;" x1="3545" x2="3735" y1="1199.5" y2="1199.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="3545" x2="3735" y1="1207.5" y2="1207.5"/><ellipse cx="3555" cy="1218.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="128" x="3564" y="1221.7104">Language(String code)</text><ellipse cx="3555" cy="1231.3047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="143" x="3564" y="1234.5151">Language of(String code)</text><ellipse cx="3555" cy="1244.1094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="119" x="3564" y="1247.3198">String getLanguage()</text><ellipse cx="3555" cy="1256.9141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="3564" y="1260.1245">int hashCode()</text><ellipse cx="3555" cy="1269.7188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="3564" y="1272.9292">boolean equals(Object obj)</text><ellipse cx="3555" cy="1282.5234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="3564" y="1285.7339">String toString()</text><ellipse cx="3555" cy="1295.3281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="166" x="3564" y="1298.5386">int compareTo(Language obj)</text><!--MD5=[c462a9d836514a9ce81180a7b6987d9a] class Lastname--><rect codeLine="382" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="Lastname" style="stroke:#A80036;stroke-width:1.5;" width="196" x="2202" y="593"/><ellipse cx="2265.25" cy="609" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M2268.2188,614.6406 Q2267.6406,614.9375 2267,615.0781 Q2266.3594,615.2344 2265.6563,615.2344 Q2263.1563,615.2344 2261.8281,613.5938 Q2260.5156,611.9375 2260.5156,608.8125 Q2260.5156,605.6875 2261.8281,604.0313 Q2263.1563,602.375 2265.6563,602.375 Q2266.3594,602.375 2267,602.5313 Q2267.6563,602.6875 2268.2188,602.9844 L2268.2188,605.7031 Q2267.5938,605.125 2267,604.8594 Q2266.4063,604.5781 2265.7813,604.5781 Q2264.4375,604.5781 2263.75,605.6563 Q2263.0625,606.7188 2263.0625,608.8125 Q2263.0625,610.9063 2263.75,611.9844 Q2264.4375,613.0469 2265.7813,613.0469 Q2266.4063,613.0469 2267,612.7813 Q2267.5938,612.5 2268.2188,611.9219 L2268.2188,614.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="61" x="2285.75" y="613.1543">Lastname</text><line style="stroke:#A80036;stroke-width:1.5;" x1="2203" x2="2397" y1="625" y2="625"/><line style="stroke:#A80036;stroke-width:1.5;" x1="2203" x2="2397" y1="633" y2="633"/><ellipse cx="2213" cy="644" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="155" x="2222" y="647.2104">Lastname(String lastname)</text><ellipse cx="2213" cy="656.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="170" x="2222" y="660.0151">Lastname of(String lastname)</text><ellipse cx="2213" cy="669.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="120" x="2222" y="672.8198">String getLastname()</text><ellipse cx="2213" cy="682.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="2222" y="685.6245">int hashCode()</text><ellipse cx="2213" cy="695.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="2222" y="698.4292">boolean equals(Object obj)</text><ellipse cx="2213" cy="708.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="2222" y="711.2339">String toString()</text><ellipse cx="2213" cy="720.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="167" x="2222" y="724.0386">int compareTo(Lastname obj)</text><!--MD5=[7c37a91e969cd730cf6521ed75133ace] class Lines--><rect codeLine="392" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="Lines" style="stroke:#A80036;stroke-width:1.5;" width="178" x="2815" y="1167.5"/><ellipse cx="2883.75" cy="1183.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M2886.7188,1189.1406 Q2886.1406,1189.4375 2885.5,1189.5781 Q2884.8594,1189.7344 2884.1563,1189.7344 Q2881.6563,1189.7344 2880.3281,1188.0938 Q2879.0156,1186.4375 2879.0156,1183.3125 Q2879.0156,1180.1875 2880.3281,1178.5313 Q2881.6563,1176.875 2884.1563,1176.875 Q2884.8594,1176.875 2885.5,1177.0313 Q2886.1563,1177.1875 2886.7188,1177.4844 L2886.7188,1180.2031 Q2886.0938,1179.625 2885.5,1179.3594 Q2884.9063,1179.0781 2884.2813,1179.0781 Q2882.9375,1179.0781 2882.25,1180.1563 Q2881.5625,1181.2188 2881.5625,1183.3125 Q2881.5625,1185.4063 2882.25,1186.4844 Q2882.9375,1187.5469 2884.2813,1187.5469 Q2884.9063,1187.5469 2885.5,1187.2813 Q2886.0938,1187 2886.7188,1186.4219 L2886.7188,1189.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="32" x="2904.25" y="1187.6543">Lines</text><line style="stroke:#A80036;stroke-width:1.5;" x1="2816" x2="2992" y1="1199.5" y2="1199.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="2816" x2="2992" y1="1207.5" y2="1207.5"/><ellipse cx="2826" cy="1218.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="103" x="2835" y="1221.7104">Lines(String lines)</text><ellipse cx="2826" cy="1231.3047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="118" x="2835" y="1234.5151">Lines of(String lines)</text><ellipse cx="2826" cy="1244.1094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="94" x="2835" y="1247.3198">String getLines()</text><ellipse cx="2826" cy="1256.9141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="2835" y="1260.1245">int hashCode()</text><ellipse cx="2826" cy="1269.7188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="2835" y="1272.9292">boolean equals(Object obj)</text><ellipse cx="2826" cy="1282.5234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="2835" y="1285.7339">String toString()</text><ellipse cx="2826" cy="1295.3281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="141" x="2835" y="1298.5386">int compareTo(Lines obj)</text><!--MD5=[b72938410eb24be6b9adca941a5128b3] class MACAddress--><rect codeLine="402" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="227.2656" id="MACAddress" style="stroke:#A80036;stroke-width:1.5;" width="225" x="3771.5" y="1123"/><ellipse cx="3841.25" cy="1139" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M3844.2188,1144.6406 Q3843.6406,1144.9375 3843,1145.0781 Q3842.3594,1145.2344 3841.6563,1145.2344 Q3839.1563,1145.2344 3837.8281,1143.5938 Q3836.5156,1141.9375 3836.5156,1138.8125 Q3836.5156,1135.6875 3837.8281,1134.0313 Q3839.1563,1132.375 3841.6563,1132.375 Q3842.3594,1132.375 3843,1132.5313 Q3843.6563,1132.6875 3844.2188,1132.9844 L3844.2188,1135.7031 Q3843.5938,1135.125 3843,1134.8594 Q3842.4063,1134.5781 3841.7813,1134.5781 Q3840.4375,1134.5781 3839.75,1135.6563 Q3839.0625,1136.7188 3839.0625,1138.8125 Q3839.0625,1140.9063 3839.75,1141.9844 Q3840.4375,1143.0469 3841.7813,1143.0469 Q3842.4063,1143.0469 3843,1142.7813 Q3843.5938,1142.5 3844.2188,1141.9219 L3844.2188,1144.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="77" x="3861.75" y="1143.1543">MACAddress</text><line style="stroke:#A80036;stroke-width:1.5;" x1="3772.5" x2="3995.5" y1="1155" y2="1155"/><line style="stroke:#A80036;stroke-width:1.5;" x1="3772.5" x2="3995.5" y1="1163" y2="1163"/><ellipse cx="3782.5" cy="1174" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="164" x="3791.5" y="1177.2104">MACAddress(String address)</text><ellipse cx="3782.5" cy="1186.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="179" x="3791.5" y="1190.0151">MACAddress of(String address)</text><ellipse cx="3782.5" cy="1199.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="199" x="3791.5" y="1202.8198">String getAddress(String delimiter)</text><ellipse cx="3782.5" cy="1212.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="125" x="3791.5" y="1215.6245">boolean isBroadcast()</text><ellipse cx="3782.5" cy="1225.2188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="102" x="3791.5" y="1228.4292">boolean isGroup()</text><ellipse cx="3782.5" cy="1238.0234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="96" x="3791.5" y="1241.2339">boolean isLocal()</text><ellipse cx="3782.5" cy="1250.8281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="141" x="3791.5" y="1254.0386">boolean isIPV4Multicast()</text><ellipse cx="3782.5" cy="1263.6328" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="141" x="3791.5" y="1266.8433">boolean isIPV6Multicast()</text><ellipse cx="3782.5" cy="1276.4375" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="95" x="3791.5" y="1279.6479">boolean isVRRP()</text><ellipse cx="3782.5" cy="1289.2422" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="84" x="3791.5" y="1292.4526">String getOUI()</text><ellipse cx="3782.5" cy="1302.0469" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="3791.5" y="1305.2573">int hashCode()</text><ellipse cx="3782.5" cy="1314.8516" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="3791.5" y="1318.062">boolean equals(Object obj)</text><ellipse cx="3782.5" cy="1327.6563" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="3791.5" y="1330.8667">String toString()</text><ellipse cx="3782.5" cy="1340.4609" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="182" x="3791.5" y="1343.6714">int compareTo(MACAddress obj)</text><!--MD5=[7133fe8ddf9426165124699ace0748f7] class Millisecond--><rect codeLine="419" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="Millisecond" style="stroke:#A80036;stroke-width:1.5;" width="199" x="4031.5" y="1167.5"/><ellipse cx="4092.75" cy="1183.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M4095.7188,1189.1406 Q4095.1406,1189.4375 4094.5,1189.5781 Q4093.8594,1189.7344 4093.1563,1189.7344 Q4090.6563,1189.7344 4089.3281,1188.0938 Q4088.0156,1186.4375 4088.0156,1183.3125 Q4088.0156,1180.1875 4089.3281,1178.5313 Q4090.6563,1176.875 4093.1563,1176.875 Q4093.8594,1176.875 4094.5,1177.0313 Q4095.1563,1177.1875 4095.7188,1177.4844 L4095.7188,1180.2031 Q4095.0938,1179.625 4094.5,1179.3594 Q4093.9063,1179.0781 4093.2813,1179.0781 Q4091.9375,1179.0781 4091.25,1180.1563 Q4090.5625,1181.2188 4090.5625,1183.3125 Q4090.5625,1185.4063 4091.25,1186.4844 Q4091.9375,1187.5469 4093.2813,1187.5469 Q4093.9063,1187.5469 4094.5,1187.2813 Q4095.0938,1187 4095.7188,1186.4219 L4095.7188,1189.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="68" x="4113.25" y="1187.6543">Millisecond</text><line style="stroke:#A80036;stroke-width:1.5;" x1="4032.5" x2="4229.5" y1="1199.5" y2="1199.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="4032.5" x2="4229.5" y1="1207.5" y2="1207.5"/><ellipse cx="4042.5" cy="1218.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="4051.5" y="1221.7104">Millisecond(int millisecond)</text><ellipse cx="4042.5" cy="1231.3047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="167" x="4051.5" y="1234.5151">Millisecond of(int millisecond)</text><ellipse cx="4042.5" cy="1244.1094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="106" x="4051.5" y="1247.3198">int getMillisecond()</text><ellipse cx="4042.5" cy="1256.9141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="4051.5" y="1260.1245">int hashCode()</text><ellipse cx="4042.5" cy="1269.7188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="4051.5" y="1272.9292">boolean equals(Object obj)</text><ellipse cx="4042.5" cy="1282.5234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="4051.5" y="1285.7339">String toString()</text><ellipse cx="4042.5" cy="1295.3281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="173" x="4051.5" y="1298.5386">int compareTo(Millisecond obj)</text><!--MD5=[985e310ff494e68a8248929510af4f06] class Milliseconds--><rect codeLine="429" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="Milliseconds" style="stroke:#A80036;stroke-width:1.5;" width="217" x="4265.5" y="1167.5"/><ellipse cx="4332.25" cy="1183.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M4335.2188,1189.1406 Q4334.6406,1189.4375 4334,1189.5781 Q4333.3594,1189.7344 4332.6563,1189.7344 Q4330.1563,1189.7344 4328.8281,1188.0938 Q4327.5156,1186.4375 4327.5156,1183.3125 Q4327.5156,1180.1875 4328.8281,1178.5313 Q4330.1563,1176.875 4332.6563,1176.875 Q4333.3594,1176.875 4334,1177.0313 Q4334.6563,1177.1875 4335.2188,1177.4844 L4335.2188,1180.2031 Q4334.5938,1179.625 4334,1179.3594 Q4333.4063,1179.0781 4332.7813,1179.0781 Q4331.4375,1179.0781 4330.75,1180.1563 Q4330.0625,1181.2188 4330.0625,1183.3125 Q4330.0625,1185.4063 4330.75,1186.4844 Q4331.4375,1187.5469 4332.7813,1187.5469 Q4333.4063,1187.5469 4334,1187.2813 Q4334.5938,1187 4335.2188,1186.4219 L4335.2188,1189.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="75" x="4352.75" y="1187.6543">Milliseconds</text><line style="stroke:#A80036;stroke-width:1.5;" x1="4266.5" x2="4481.5" y1="1199.5" y2="1199.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="4266.5" x2="4481.5" y1="1207.5" y2="1207.5"/><ellipse cx="4276.5" cy="1218.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="176" x="4285.5" y="1221.7104">Milliseconds(long milliseconds)</text><ellipse cx="4276.5" cy="1231.3047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="191" x="4285.5" y="1234.5151">Milliseconds of(long milliseconds)</text><ellipse cx="4276.5" cy="1244.1094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="123" x="4285.5" y="1247.3198">long getMilliseconds()</text><ellipse cx="4276.5" cy="1256.9141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="4285.5" y="1260.1245">int hashCode()</text><ellipse cx="4276.5" cy="1269.7188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="4285.5" y="1272.9292">boolean equals(Object obj)</text><ellipse cx="4276.5" cy="1282.5234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="4285.5" y="1285.7339">String toString()</text><ellipse cx="4276.5" cy="1295.3281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="180" x="4285.5" y="1298.5386">int compareTo(Milliseconds obj)</text><!--MD5=[8d778fd6f620b276d9a928df04428f40] class Minute--><rect codeLine="439" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="Minute" style="stroke:#A80036;stroke-width:1.5;" width="178" x="4518" y="1167.5"/><ellipse cx="4581.75" cy="1183.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M4584.7188,1189.1406 Q4584.1406,1189.4375 4583.5,1189.5781 Q4582.8594,1189.7344 4582.1563,1189.7344 Q4579.6563,1189.7344 4578.3281,1188.0938 Q4577.0156,1186.4375 4577.0156,1183.3125 Q4577.0156,1180.1875 4578.3281,1178.5313 Q4579.6563,1176.875 4582.1563,1176.875 Q4582.8594,1176.875 4583.5,1177.0313 Q4584.1563,1177.1875 4584.7188,1177.4844 L4584.7188,1180.2031 Q4584.0938,1179.625 4583.5,1179.3594 Q4582.9063,1179.0781 4582.2813,1179.0781 Q4580.9375,1179.0781 4580.25,1180.1563 Q4579.5625,1181.2188 4579.5625,1183.3125 Q4579.5625,1185.4063 4580.25,1186.4844 Q4580.9375,1187.5469 4582.2813,1187.5469 Q4582.9063,1187.5469 4583.5,1187.2813 Q4584.0938,1187 4584.7188,1186.4219 L4584.7188,1189.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="42" x="4602.25" y="1187.6543">Minute</text><line style="stroke:#A80036;stroke-width:1.5;" x1="4519" x2="4695" y1="1199.5" y2="1199.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="4519" x2="4695" y1="1207.5" y2="1207.5"/><ellipse cx="4529" cy="1218.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="102" x="4538" y="1221.7104">Minute(int minute)</text><ellipse cx="4529" cy="1231.3047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="117" x="4538" y="1234.5151">Minute of(int minute)</text><ellipse cx="4529" cy="1244.1094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="81" x="4538" y="1247.3198">int getMinute()</text><ellipse cx="4529" cy="1256.9141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="4538" y="1260.1245">int hashCode()</text><ellipse cx="4529" cy="1269.7188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="4538" y="1272.9292">boolean equals(Object obj)</text><ellipse cx="4529" cy="1282.5234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="4538" y="1285.7339">String toString()</text><ellipse cx="4529" cy="1295.3281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="148" x="4538" y="1298.5386">int compareTo(Minute obj)</text><!--MD5=[a326f0a337d13ab67127bd6bc29aa2d1] class Minutes--><rect codeLine="449" fill="#FEFECE" filter="url(#f1kupinza3sv04)" height="137.6328" id="Minutes" style="stroke:#A80036;stroke-width:1.5;" width="181" x="4731.5" y="1167.5"/><ellipse cx="4793.25" cy="1183.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M4796.2188,1189.1406 Q4795.6406,1189.4375 4795,1189.5781 Q4794.3594,1189.7344 4793.6563,1189.7344 Q4791.1563,1189.7344 4789.8281,1188.0938 Q4788.5156,1186.4375 4788.5156,1183.3125 Q4788.5156,1180.1875 4789.8281,1178.5313 Q4791.1563,1176.875 4793.6563,1176.875 Q4794.3594,1176.875 4795,1177.0313 Q4795.6563,1177.1875 4796.2188,1177.4844 L4796.2188,1180.2031 Q4795.5938,1179.625 4795,1179.3594 Q4794.4063,1179.0781 4793.7813,1179.0781 Q4792.4375,1179.0781 4791.75,1180.1563 Q4791.0625,1181.2188 4791.0625,1183.3125 Q4791.0625,1185.4063 4791.75,1186.4844 Q4792.4375,1187.5469 4793.7813,1187.5469 Q4794.4063,1187.5469 4795,1187.2813 Q4795.5938,1187 4796.2188,1186.4219 L4796.2188,1189.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="49" x="4813.75" y="1187.6543">Minutes</text><line style="stroke:#A80036;stroke-width:1.5;" x1="4732.5" x2="4911.5" y1="1199.5" y2="1199.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="4732.5" x2="4911.5" y1="1207.5" y2="1207.5"/><ellipse cx="4742.5" cy="1218.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="126" x="4751.5" y="1221.7104">Minutes(long minutes)</text><ellipse cx="4742.5" cy="1231.3047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="141" x="4751.5" y="1234.5151">Minutes of(long minutes)</text><ellipse cx="4742.5" cy="1244.1094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="98" x="4751.5" y="1247.3198">long getMinutes()</text><ellipse cx="4742.5" cy="1256.9141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="4751.5" y="1260.1245">int hashCode()</text><ellipse cx="4742.5" cy="1269.7188" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152" x="4751.5" y="1272.9292">boolean equals(Object obj)</text><ellipse cx="4742.5" cy="1282.5234" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="91" x="4751.5" y="1285.7339">String toString()</text><ellipse cx="4742.5" cy="1295.3281" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="155" x="4751.5" y="1298.5386">int compareTo(Minutes obj)</text><!--MD5=[1c40a9495d7098c3b845044b099123dc]