diff --git a/.gitignore b/.gitignore index ad1090c..6e4532f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,9 @@ target/ build/ dist/ +# Maven installation (use wrapper instead) +apache-maven-3.9.9/ + # Compiled class file *.class *agent* @@ -53,12 +56,23 @@ replay_pid* # Maven .m2/ maven-repo/ +dependency-reduced-pom.xml # Node (if used for frontend) node_modules/ npm-debug.log yarn-error.log +# Runtime data +data/ +exports/ +*.db +*.sqlite +*.csv + +# Dev notes (AI agents, design docs, scratch) +.dev-notes/ + # Misc *.tmp *.bak diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..ffcab66 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,3 @@ +wrapperVersion=3.3.4 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip diff --git a/SETUP_SUMMARY.md b/SETUP_SUMMARY.md deleted file mode 100644 index 1942524..0000000 --- a/SETUP_SUMMARY.md +++ /dev/null @@ -1,226 +0,0 @@ -# ✅ Summary: Codebase State Verification & Test Data Setup - ---- - -## 🔍 Your Question #1: "Is the codebase truly a skeleton?" - -### **ANSWER: NO** ❌ - -**The "skeleton" claim is OUTDATED.** - -- ✓ Session token-based authentication with TTL -- ✓ Image upload, JPG re-encoding, thumbnail generation -- ✓ Database with transactions, FK constraints, indexes -- ✓ RMI service with complete method implementations -- ✓ Snipe protection with hard cap -- ✓ Activity views (My Bids, Won Auctions, Outbid) -- ✓ CSV export with RFC 4180 escaping - -✅ **Status:** ~75-80% production-ready (mainly needs test coverage) - -📄 **See:** [docs/CODEBASE_VERIFICATION.md](docs/CODEBASE_VERIFICATION.md) for detailed evidence - -### **DONE!** ✅ - -Created TWO test utilities: - -### **1. DemoSeeder** - -**What it does:** - -- Creates 7 test users (3 sellers, 4 bidders) -- Creates 6 active auctions with various timers -- Places 30+ initial bids simulating activity -- bella-247 is leading bidder on 3 auctions - -**Run:** - -```bash -mvn exec:java -Dexec.mainClass=com.auction.server.tools.DemoSeeder -``` - -**Output:** - -``` -✓ 7 users created -✓ 6 auctions created (3-48 hour durations) -✓ 30+ bids placed -``` - -### **2. SeedTestImages** - -**What it does:** - -- Generates 18 full-size images (400x400px) -- Generates 18 thumbnail images (100x100px) -- Each image is colorful with category emoji -- Stored in `resources/images/` and `resources/thumbs/` - -**Run:** - -```bash -mvn exec:java -Dexec.mainClass=com.auction.server.tools.SeedTestImages -``` - ---- - -## 🎯 Test Accounts Created - -| User | Password | Role | -| -------------- | -------- | ---------- | -| **bella-247** | password | **Bidder** | -| seller-alice | pass123 | Seller | -| seller-bob | pass123 | Seller | -| seller-charlie | pass123 | Seller | -| bidder-dan | pass123 | Bidder | -| bidder-eve | pass123 | Bidder | -| bidder-frank | pass123 | Bidder | -| admin | admin | Admin | - ---- - -## 🎨 Seeded Auctions (For bella-247) - -| # | Title | Current Bid | Highest Bidder | Duration | Status | -| --- | ------------ | ----------- | -------------- | ------------ | ------ | -| 1 | Walkman | $16.00 | **bella-247** | 24 hours | ACTIVE | -| 2 | Atari 2600 | $0.00 | (none) | **5 min** ⏰ | ACTIVE | -| 3 | Teak Chair | $82.00 | bidder-frank | 4 hours | ACTIVE | -| 4 | Oil Painting | $155.00 | bidder-eve | 48 hours | ACTIVE | -| 5 | Harry Potter | $205.00 | **bella-247** | **3 min** ⏰ | ACTIVE | -| 6 | Bookshelf | $20.30 | **bella-247** | 12 hours | ACTIVE | - -**Note:** Auctions #2 & #5 expire quickly — great for testing the Reaper! - ---- - -## 🚀 Quick Start (3 steps) - -```bash -# Step 1: Seed database -mvn exec:java -Dexec.mainClass=com.auction.server.tools.DemoSeeder - -# Step 2: Generate test images -mvn exec:java -Dexec.mainClass=com.auction.server.tools.SeedTestImages - -# Step 3: Start server -mvn exec:java - -# Then login with: bella-247 / pass123 -``` - -**Or use convenience script:** - -```bash -./seed-demo-data.bat # Windows -./seed-demo-data.sh # Mac/Linux -``` - ---- - -## ✅ What You Can Now Test - -### For **bella-247 (Bidder):** - -✅ Login and view gallery with thumbnails -✅ Click auction to see full images -✅ Place bids with validation -✅ Watch real-time bid updates (2-sec polling) -✅ Test snipe protection (extends end time) -✅ View "My Activity" tabs (My Bids, Won, Outbid) -✅ Experience optimistic locking (stale data) - -### For **seller-alice:** - -✅ View personal auctions dashboard -✅ Cancel auctions with zero bids -✅ Relist expired auctions -✅ Export auctions to CSV -✅ Track bid history on owned items - -### For **System Features:** - -✅ Watch Reaper expire short auctions (3 & 5 min) -✅ Test image upload & thumbnail generation -✅ Verify button functionality across all screens -✅ Check error handling and validation - ---- - -## 📚 Documentation Created - -| Document | Purpose | -| --------------------------------------------------------- | ---------------------------------------------------------- | -| [CODEBASE_VERIFICATION.md](docs/CODEBASE_VERIFICATION.md) | Detailed evidence that bidding/reaper/auth ARE implemented | -| [TESTING_GUIDE.md](docs/TESTING_GUIDE.md) | Comprehensive test scenarios for all features | -| [QUICK_START.md](QUICK_START.md) | 10-minute test scenarios for quick validation | -| [seed-demo-data.bat](seed-demo-data.bat) | Windows convenience script | -| [seed-demo-data.sh](seed-demo-data.sh) | Mac/Linux convenience script | - ---- - -## 🔧 File Locations - -**Java seeders:** - -``` -src/main/java/com/auction/server/tools/ - ├── DemoSeeder.java (creates users, auctions, bids) - └── SeedTestImages.java (generates colorful test images) -``` - -**Generated data:** - -``` -data/ - └── auction.db.sqlite (SQLite database) -resources/ - ├── images/ (full-size images: 400x400px) - └── thumbs/ (thumbnails: 40x40px) -``` - -**Documentation:** - -``` -docs/ - ├── CODEBASE_VERIFICATION.md (verdict on skeleton claim) - └── TESTING_GUIDE.md (detailed test scenarios) -QUICK_START.md (quick reference) -``` - ---- - -## ⚠️ Important Notes - -1. **Before seeding:** Make sure server is NOT running -2. **Image directories:** Auto-created if missing -3. **Auction #2 & #5 expire fast:** Good for testing Reaper -4. **bella-247 is leading bidder:** On 3 different auctions -5. **Button testing:** Each button links to actual backend methods (confirmed) - ---- - -## 🎯 Next Actions - -1. **Run the seeder scripts** -2. **Start the server** -3. **Login as bella-247** -4. **Follow the test scenarios in TESTING_GUIDE.md** -5. **Check button functionality against the audit checklist** - ---- - -## 📞 Quick Reference - -**Most important fact:** -✅ Business logic (bidding, reaper, auth, images) is **FULLY IMPLEMENTED**, not a skeleton. - -**Test data:** -✅ 7 users, 6 auctions, 30+ bids, 36 images ready to go. - -**To start:** -✅ Run seeder → Generate images → Start server → Login as bella-247 - ---- - -**You're all set!** 🚀 diff --git a/abel.md b/abel.md deleted file mode 100644 index ca86e04..0000000 --- a/abel.md +++ /dev/null @@ -1,73 +0,0 @@ -com.auction/ -├── shared/ # Shared between client & server (RMI transport) -│ ├── interfaces/ -│ │ └── IAuctionService.java # RMI contract (Remote interface) -│ ├── models/ -│ │ ├── AuctionItem.java # Serializable auction data -│ │ ├── Bid.java # Serializable bid data -│ │ ├── User.java # Base user class -│ │ └── Admin.java # Admin subclass -│ ├── enums/ -│ │ ├── AuctionStatus.java # ACTIVE, SOLD, EXPIRED, CANCELLED -│ │ └── Category.java # ELECTRONICS, FURNITURE, ART, OTHER -│ ├── exceptions/ -│ │ ├── AuctionException.java # Base exception -│ │ ├── InsufficientBidException.java # < 5% increment -│ │ ├── SelfBidException.java # Seller bidding on own item -│ │ ├── StaleDataException.java # Price changed mid-bid -│ │ ├── DuplicateBidException.java # Already highest bidder -│ │ ├── AuctionClosedException.java # Auction ended/cancelled -│ │ ├── RateLimitedException.java # Too many requests -│ │ ├── SnipeCapReachedException.java # Max extension reached -│ │ └── UnauthorizedException.java # Invalid session -│ └── Constants.java # All magic values centralized -│ -├── server/ -│ ├── core/ -│ │ ├── ServerLauncher.java # main() entry point -│ │ ├── ServerBootstrap.java # Component wiring -│ │ ├── SessionContext.java # Record: (username, role) -│ │ ├── AuctionManager.java # DEEP: All bidding logic -│ │ ├── LifecycleManager.java # DEEP: State transitions -│ │ ├── LockManager.java # Per-auction ReentrantLocks -│ │ ├── TransactionManager.java # DB transaction boundaries -│ │ ├── ImageStore.java # DEEP: Filesystem + DB sync -│ │ ├── UdpBroadcaster.java # Server discovery broadcast -│ │ └── logging/ -│ │ ├── AsyncLogger.java # Producer-consumer queue -│ │ ├── LogEntry.java # Log record -│ │ ├── LogCategory.java # AUDIT, BID, SECURITY, SYSTEM -│ │ └── EventType.java # Specific event types -│ ├── service/ -│ │ ├── AuctionServiceImpl.java # RMI Adapter layer -│ │ └── AuctionReaper.java # Background lifecycle thread -│ ├── repository/ -│ │ ├── DatabaseManager.java # SQLite connection + schema -│ │ ├── UserRepository.java # User CRUD -│ │ ├── AuctionRepository.java # Auction CRUD -│ │ └── BidRepository.java # Bid CRUD -│ └── util/ -│ ├── SecurityUtil.java # SHA-256 password hashing -│ └── AuditLogger.java # (Legacy, replaced by AsyncLogger) -│ -└── client/ - ├── ClientApp.java # JavaFX Application entry - ├── ClientLauncher.java # Static main() wrapper - ├── core/ - │ ├── ClientContext.java # Singleton: holds session state - │ └── ... - ├── controllers/ - │ ├── ConnectController.java # Server discovery UI - │ ├── LoginController.java # Authentication UI - │ ├── SellerDashboardController.java - │ ├── AdminPanelController.java - │ ├── GalleryController.java # (TODO: incomplete) - │ ├── AuctionDetailController.java # (TODO: incomplete) - │ └── RegistrationController.java - ├── network/ - │ ├── RmiClientProvider.java # RMI stub lookup - │ └── UdpDiscoveryClient.java # Listen for broadcasts - ├── service/ - │ └── PollingService.java # (TODO: 2s polling) - └── ui/ - └── ViewLoader.java # FXML navigation \ No newline at end of file diff --git a/apache-maven-3.9.9/LICENSE b/apache-maven-3.9.9/LICENSE deleted file mode 100644 index b249f9c..0000000 --- a/apache-maven-3.9.9/LICENSE +++ /dev/null @@ -1,760 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -Apache Maven includes a number of components and libraries with separate -copyright notices and license terms. Your use of those components are -subject to the terms and conditions of the following licenses: - - - - - - - - - - - -- lib/aopalliance-1.0.jar: aopalliance:aopalliance:jar:1.0 - Project: AOP alliance -Project URL: http://aopalliance.sourceforge.net - License: Public Domain (unrecognized) - - License URL: $license.url (lib/aopalliance.license) - - - - - - - - - - - - - - - -- lib/failureaccess-1.0.2.jar: com.google.guava:failureaccess:bundle:1.0.2 - Project: Guava InternalFutureFailureAccess and InternalFutures -Project URL: https://github.com/google/guava/ - License: The Apache Software License, Version 2.0 (Apache-2.0) - - License URL: http://www.apache.org/licenses/LICENSE-2.0.txt (lib/failureaccess.license) - - - - - - - - - - - - - - -- lib/guava-33.2.1-jre.jar: com.google.guava:guava:bundle:33.2.1-jre - Project: Guava: Google Core Libraries for Java -Project URL: https://github.com/google/guava - License: Apache License, Version 2.0 (Apache-2.0) - - License URL: http://www.apache.org/licenses/LICENSE-2.0.txt (lib/guava.license) - - - - - - - - - - - - - - - -- lib/guice-5.1.0.jar: com.google.inject:guice:jar:5.1.0 - Project: Google Guice - Core Library -Project URL: https://github.com/google/guice/ - License: The Apache Software License, Version 2.0 (Apache-2.0) - - License URL: http://www.apache.org/licenses/LICENSE-2.0.txt (lib/guice.license) - - - - - - - - - - - - - - -- lib/commons-cli-1.8.0.jar: commons-cli:commons-cli:jar:1.8.0 - Project: Apache Commons CLI -Project URL: https://commons.apache.org/proper/commons-cli/ - License: Apache-2.0 (Apache-2.0) - - License URL: https://www.apache.org/licenses/LICENSE-2.0.txt (lib/commons-cli.license) - - - - - - - - - - - - - - -- lib/commons-codec-1.17.1.jar: commons-codec:commons-codec:jar:1.17.1 - Project: Apache Commons Codec -Project URL: https://commons.apache.org/proper/commons-codec/ - License: Apache-2.0 (Apache-2.0) - - License URL: https://www.apache.org/licenses/LICENSE-2.0.txt (lib/commons-codec.license) - - - - - - - - - - - - - - -- lib/javax.annotation-api-1.3.2.jar: javax.annotation:javax.annotation-api:jar:1.3.2 - Project: javax.annotation API -Project URL: http://jcp.org/en/jsr/detail?id=250 - License: CDDL + GPLv2 with classpath exception (unrecognized) - - License URL: https://github.com/javaee/javax.annotation/blob/master/LICENSE (lib/javax.annotation-api.license) - - - - - - - - - - - - - - -- lib/javax.inject-1.jar: javax.inject:javax.inject:jar:1 - Project: javax.inject -Project URL: http://code.google.com/p/atinject/ - License: The Apache Software License, Version 2.0 (Apache-2.0) - - License URL: http://www.apache.org/licenses/LICENSE-2.0.txt (lib/javax.inject.license) - - - - - - - - - - - - - - -- lib/httpclient-4.5.14.jar: org.apache.httpcomponents:httpclient:jar:4.5.14 - Project: Apache HttpClient -Project URL: http://hc.apache.org/httpcomponents-client-ga - License: Apache License, Version 2.0 (Apache-2.0) - - License URL: http://www.apache.org/licenses/LICENSE-2.0.txt (lib/httpclient.license) - - - - - - - - - - - - - - -- lib/httpcore-4.4.16.jar: org.apache.httpcomponents:httpcore:jar:4.4.16 - Project: Apache HttpCore -Project URL: http://hc.apache.org/httpcomponents-core-ga - License: Apache License, Version 2.0 (Apache-2.0) - - License URL: http://www.apache.org/licenses/LICENSE-2.0.txt (lib/httpcore.license) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- lib/plexus-cipher-2.0.jar: org.codehaus.plexus:plexus-cipher:jar:2.0 - Project: Plexus Cipher: encryption/decryption Component -Project URL: https://codehaus-plexus.github.io/plexus-cipher/ - License: Apache License, Version 2.0 (Apache-2.0) - - License URL: http://www.apache.org/licenses/LICENSE-2.0.txt (lib/plexus-cipher.license) - - - - - - - - - - - - - - - -- boot/plexus-classworlds-2.8.0.jar: org.codehaus.plexus:plexus-classworlds:bundle:2.8.0 - Project: Plexus Classworlds -Project URL: https://codehaus-plexus.github.io/plexus-classworlds/ - License: Apache License, Version 2.0 (Apache-2.0) - - License URL: https://www.apache.org/licenses/LICENSE-2.0.txt (boot/plexus-classworlds.license) - - - - - - - - - - - - - - -- lib/plexus-component-annotations-2.1.0.jar: org.codehaus.plexus:plexus-component-annotations:jar:2.1.0 - Project: Plexus :: Component Annotations -Project URL: http://codehaus-plexus.github.io/plexus-containers/plexus-component-annotations/ - License: Apache License, Version 2.0 (Apache-2.0) - - License URL: http://www.apache.org/licenses/LICENSE-2.0.txt (lib/plexus-component-annotations.license) - - - - - - - - - - - - - - -- lib/plexus-interpolation-1.27.jar: org.codehaus.plexus:plexus-interpolation:bundle:1.27 - Project: Plexus Interpolation API -Project URL: https://codehaus-plexus.github.io/plexus-pom/plexus-interpolation/ - License: Apache License, Version 2.0 (Apache-2.0) - - License URL: https://www.apache.org/licenses/LICENSE-2.0.txt (lib/plexus-interpolation.license) - - - - - - - - - - - - - - -- lib/plexus-sec-dispatcher-2.0.jar: org.codehaus.plexus:plexus-sec-dispatcher:jar:2.0 - Project: Plexus Security Dispatcher Component -Project URL: https://codehaus-plexus.github.io/plexus-sec-dispatcher/ - License: Apache License, Version 2.0 (Apache-2.0) - - License URL: http://www.apache.org/licenses/LICENSE-2.0.txt (lib/plexus-sec-dispatcher.license) - - - - - - - - - - - - - - -- lib/plexus-utils-3.5.1.jar: org.codehaus.plexus:plexus-utils:jar:3.5.1 - Project: Plexus Common Utilities -Project URL: https://codehaus-plexus.github.io/plexus-utils/ - License: Apache License, Version 2.0 (Apache-2.0) - - License URL: http://www.apache.org/licenses/LICENSE-2.0.txt (lib/plexus-utils.license) - - - - - - - - - - - - - - -- lib/plexus-xml-3.0.1.jar: org.codehaus.plexus:plexus-xml:jar:3.0.1 - Project: Plexus XML Utilities -Project URL: https://codehaus-plexus.github.io/plexus-xml/ - License: Apache License, Version 2.0 (Apache-2.0) - - License URL: https://www.apache.org/licenses/LICENSE-2.0.txt (lib/plexus-xml.license) - - - - - - - - - - - - - - - -- lib/org.eclipse.sisu.inject-0.9.0.M3.jar: org.eclipse.sisu:org.eclipse.sisu.inject:jar:0.9.0.M3 - Project: org.eclipse.sisu.inject -Project URL: https://www.eclipse.org/sisu/ - License: Eclipse Public License, Version 2.0 (EPL-2.0) - - License URL: https://www.eclipse.org/legal/epl-v20.html (lib/org.eclipse.sisu.inject.license) - - - - - - - - - - - - - - - -- lib/org.eclipse.sisu.plexus-0.9.0.M3.jar: org.eclipse.sisu:org.eclipse.sisu.plexus:jar:0.9.0.M3 - Project: org.eclipse.sisu.plexus -Project URL: https://www.eclipse.org/sisu/ - License: Eclipse Public License, Version 2.0 (EPL-2.0) - - License URL: https://www.eclipse.org/legal/epl-v20.html (lib/org.eclipse.sisu.plexus.license) - - - - - - - - - - - - - - -- lib/jansi-2.4.1.jar: org.fusesource.jansi:jansi:jar:2.4.1 - Project: Jansi -Project URL: http://fusesource.github.io/jansi - License: Apache License, Version 2.0 (Apache-2.0) - - License URL: http://www.apache.org/licenses/LICENSE-2.0.txt (lib/jansi.license) - - - - - - - - - - - - - - -- lib/jcl-over-slf4j-1.7.36.jar: org.slf4j:jcl-over-slf4j:jar:1.7.36 - Project: JCL 1.2 implemented over SLF4J -Project URL: http://www.slf4j.org - License: Apache License, Version 2.0 (Apache-2.0) - - License URL: https://www.apache.org/licenses/LICENSE-2.0.txt (lib/jcl-over-slf4j.license) - - - - - - - - - - - - - - -- lib/slf4j-api-1.7.36.jar: org.slf4j:slf4j-api:jar:1.7.36 - Project: SLF4J API Module -Project URL: http://www.slf4j.org - License: MIT License (MIT) - - License URL: http://www.opensource.org/licenses/mit-license.php (lib/slf4j-api.license) - - - diff --git a/apache-maven-3.9.9/NOTICE b/apache-maven-3.9.9/NOTICE deleted file mode 100644 index 4375095..0000000 --- a/apache-maven-3.9.9/NOTICE +++ /dev/null @@ -1,104 +0,0 @@ -Apache Maven Distribution -Copyright 2001-2024 The Apache Software Foundation - - -This product includes software developed at -The Apache Software Foundation (http://www.apache.org/). -This software bundles the following NOTICE files from third party library providers: - -META-INF/NOTICE in archive lib/guice-5.1.0.jar -Google Guice - Core Library -Copyright 2006-2022 Google, Inc. -This product includes software developed at -The Apache Software Foundation (http://www.apache.org/). - -META-INF/NOTICE in archive lib/plexus-utils-3.2.1.jar -This product includes software developed by the Indiana University - Extreme! Lab (http://www.extreme.indiana.edu/). -This product includes software developed by -The Apache Software Foundation (http://www.apache.org/). -This product includes software developed by -ThoughtWorks (http://www.thoughtworks.com). -This product includes software developed by -javolution (http://javolution.org/). -This product includes software developed by -Rome (https://rome.dev.java.net/). - -about.html in archive lib/org.eclipse.sisu.inject-0.3.5.jar - - - - - -About org.eclipse.sisu.inject - - -

About org.eclipse.sisu.inject

- -

November 5, 2013

-

License

- -

The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise -indicated below, the Content is provided to you under the terms and conditions of the -Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available -at http://www.eclipse.org/legal/epl-v10.html. -For purposes of the EPL, "Program" will mean the Content.

- -

If you did not receive this Content directly from the Eclipse Foundation, the Content is -being redistributed by another party ("Redistributor") and different terms and conditions may -apply to your use of any object code in the Content. Check the Redistributor's license that was -provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise -indicated below, the terms and conditions of the EPL still apply to any source code in the Content -and such source code may be obtained at http://www.eclipse.org.

- -

Third Party Content

-

The Content includes items that have been sourced from third parties as set -out below. If you did not receive this Content directly from the Eclipse Foundation, -the following is provided for informational purposes only, and you should look -to the Redistributor's license for terms and conditions of use.

- -

ASM 4.1

-

The plug-in includes software developed by the ObjectWeb consortium as part -of the ASM project at http://asm.ow2.org/.

- -

A subset of ASM is re-packaged within the source and binary of the plug-in (org.eclipse.sisu.space.asm.*) -to avoid version collisions with other usage and is also available from the plug-in's github repository.

- -

Your use of the ASM code is subject to the terms and conditions of the ASM License -below which is also available at http://asm.ow2.org/license.html.

- -
-Copyright (c) 2000-2011 INRIA, France Telecom
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holders nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGE.
-
- - - diff --git a/apache-maven-3.9.9/README.txt b/apache-maven-3.9.9/README.txt deleted file mode 100644 index 6d959bb..0000000 --- a/apache-maven-3.9.9/README.txt +++ /dev/null @@ -1,41 +0,0 @@ - - Apache Maven - - What is it? - ----------- - - Maven is a software project management and comprehension tool. Based on - the concept of a Project Object Model (POM), Maven can manage a project's - build, reporting and documentation from a central piece of information. - - Documentation - ------------- - - The most up-to-date documentation can be found at https://maven.apache.org/. - - Release Notes - ------------- - - The full list of changes, system requirements and related can be found at https://maven.apache.org/docs/history.html. - - Installing Maven - ---------------- - - For complete documentation see https://maven.apache.org/download.html#Installation - - Licensing - --------- - - Please see the file called LICENSE. - - Maven URLS - ---------- - - Home Page: https://maven.apache.org/ - Downloads: https://maven.apache.org/download.html - Release Notes: https://maven.apache.org/docs/history.html - Mailing Lists: https://maven.apache.org/mailing-lists.html - Source Code: https://gitbox.apache.org/repos/asf/maven.git - Issue Tracking: https://issues.apache.org/jira/browse/MNG - Wiki: https://cwiki.apache.org/confluence/display/MAVEN/ - Available Plugins: https://maven.apache.org/plugins/ diff --git a/apache-maven-3.9.9/bin/m2.conf b/apache-maven-3.9.9/bin/m2.conf deleted file mode 100644 index c446568..0000000 --- a/apache-maven-3.9.9/bin/m2.conf +++ /dev/null @@ -1,10 +0,0 @@ -main is org.apache.maven.cli.MavenCli from plexus.core - -set maven.conf default ${maven.home}/conf - -[plexus.core] -load ${maven.conf}/logging -optionally ${maven.home}/lib/ext/redisson/*.jar -optionally ${maven.home}/lib/ext/hazelcast/*.jar -optionally ${maven.home}/lib/ext/*.jar -load ${maven.home}/lib/*.jar diff --git a/apache-maven-3.9.9/bin/mvn b/apache-maven-3.9.9/bin/mvn deleted file mode 100644 index 38b036a..0000000 --- a/apache-maven-3.9.9/bin/mvn +++ /dev/null @@ -1,207 +0,0 @@ -#!/bin/sh - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -# ----------------------------------------------------------------------------- -# Apache Maven Startup Script -# -# Environment Variable Prerequisites -# -# JAVA_HOME Must point at your Java Development Kit installation. -# MAVEN_ARGS (Optional) Arguments passed to Maven before CLI arguments. -# MAVEN_OPTS (Optional) Java runtime options used when Maven is executed. -# MAVEN_SKIP_RC (Optional) Flag to disable loading of mavenrc files. -# ----------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /usr/local/etc/mavenrc ] ; then - . /usr/local/etc/mavenrc - fi - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -mingw=false; -case "`uname`" in - CYGWIN*) cygwin=true;; - MINGW*) mingw=true;; -esac - -## resolve links - $0 may be a link to Maven's home -PRG="$0" - -# need this for relative symlinks -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi -done - -saveddir=`pwd` - -MAVEN_HOME=`dirname "$PRG"`/.. - -# make it fully qualified -MAVEN_HOME=`cd "$MAVEN_HOME" && pwd` - -cd "$saveddir" - -# For Cygwin, ensure paths are in Unix format before anything is touched -if $cygwin ; then - [ -n "$MAVEN_HOME" ] && - MAVEN_HOME=`cygpath --unix "$MAVEN_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For MinGW, ensure paths are in Unix format before anything is touched -if $mingw ; then - [ -n "$MAVEN_HOME" ] && - MAVEN_HOME=`(cd "$MAVEN_HOME"; pwd)` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`(cd "$JAVA_HOME"; pwd)` - # TODO classpath? -fi - -if [ -z "$JAVA_HOME" ] ; then - JAVACMD="`\\unset -f command; \\command -v java`" -else - JAVACMD="$JAVA_HOME/bin/java" -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "The JAVA_HOME environment variable is not defined correctly," >&2 - echo "this environment variable is needed to run this program." >&2 - exit 1 -fi - -CLASSWORLDS_JAR=`echo "${MAVEN_HOME}"/boot/plexus-classworlds-*.jar` -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - [ -n "$MAVEN_HOME" ] && - MAVEN_HOME=`cygpath --path --windows "$MAVEN_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$CLASSWORLDS_JAR" ] && - CLASSWORLDS_JAR=`cygpath --path --windows "$CLASSWORLDS_JAR"` -fi - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { -( - basedir=`find_file_argument_basedir "$@"` - wdir="${basedir}" - while : - do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - if [ "$wdir" = '/' ] ; then - break - fi - wdir=`cd "$wdir/.."; pwd` - done - echo "${basedir}" -) -} - -find_file_argument_basedir() { -( - basedir=`pwd` - - found_file_switch=0 - for arg in "$@"; do - if [ ${found_file_switch} -eq 1 ]; then - if [ -d "${arg}" ]; then - basedir=`cd "${arg}" && pwd -P` - elif [ -f "${arg}" ]; then - basedir=`dirname "${arg}"` - basedir=`cd "${basedir}" && pwd -P` - if [ ! -d "${basedir}" ]; then - echo "Directory ${basedir} extracted from the -f/--file command-line argument ${arg} does not exist" >&2 - exit 1 - fi - else - echo "POM file ${arg} specified with the -f/--file command line argument does not exist" >&2 - exit 1 - fi - break - fi - if [ "$arg" = "-f" -o "$arg" = "--file" ]; then - found_file_switch=1 - fi - done - echo "${basedir}" -) -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "`tr -s '\r\n' ' ' < "$1"`" - fi -} - -MAVEN_PROJECTBASEDIR="${MAVEN_BASEDIR:-`find_maven_basedir "$@"`}" -MAVEN_OPTS="`concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config"` $MAVEN_OPTS" - -# For Cygwin, switch project base directory path to Windows format before -# executing Maven otherwise this will cause Maven not to consider it. -if $cygwin ; then - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -export MAVEN_PROJECTBASEDIR - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - $MAVEN_DEBUG_OPTS \ - -classpath "${CLASSWORLDS_JAR}" \ - "-Dclassworlds.conf=${MAVEN_HOME}/bin/m2.conf" \ - "-Dmaven.home=${MAVEN_HOME}" \ - "-Dlibrary.jansi.path=${MAVEN_HOME}/lib/jansi-native" \ - "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${CLASSWORLDS_LAUNCHER} ${MAVEN_ARGS} "$@" diff --git a/apache-maven-3.9.9/bin/mvn.cmd b/apache-maven-3.9.9/bin/mvn.cmd deleted file mode 100644 index 065f3c3..0000000 --- a/apache-maven-3.9.9/bin/mvn.cmd +++ /dev/null @@ -1,202 +0,0 @@ -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. - -@REM ----------------------------------------------------------------------------- -@REM Apache Maven Startup Script -@REM -@REM Environment Variable Prerequisites -@REM -@REM JAVA_HOME Must point at your Java Development Kit installation. -@REM MAVEN_ARGS (Optional) Arguments passed to Maven before CLI arguments. -@REM MAVEN_BATCH_ECHO (Optional) Set to 'on' to enable the echoing of the batch commands. -@REM MAVEN_BATCH_PAUSE (Optional) set to 'on' to wait for a key stroke before ending. -@REM MAVEN_OPTS (Optional) Java runtime options used when Maven is executed. -@REM MAVEN_SKIP_RC (Optional) Flag to disable loading of mavenrc files. -@REM ----------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%"=="on" echo %MAVEN_BATCH_ECHO% - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%"=="" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* -if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%"=="" goto OkJHome -for %%i in (java.exe) do set "JAVACMD=%%~$PATH:i" -goto checkJCmd - -:OkJHome -set "JAVACMD=%JAVA_HOME%\bin\java.exe" - -:checkJCmd -if exist "%JAVACMD%" goto chkMHome - -echo The JAVA_HOME environment variable is not defined correctly, >&2 -echo this environment variable is needed to run this program. >&2 -goto error - -:chkMHome -set "MAVEN_HOME=%~dp0" -set "MAVEN_HOME=%MAVEN_HOME:~0,-5%" -if not "%MAVEN_HOME%"=="" goto checkMCmd -goto error - -:checkMCmd -if exist "%MAVEN_HOME%\bin\mvn.cmd" goto init -goto error -@REM ==== END VALIDATION ==== - -:init - -set MAVEN_CMD_LINE_ARGS=%* - -@REM Find the project basedir, i.e., the directory that contains the directory ".mvn". -@REM Fallback to current working directory if not found. - -set "MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%" -if not "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set "EXEC_DIR=%CD%" -set "WDIR=%EXEC_DIR%" - -@REM Look for the --file switch and start the search for the .mvn directory from the specified -@REM POM location, if supplied. - -set FILE_ARG= -:arg_loop -if "%~1" == "-f" ( - set "FILE_ARG=%~2" - shift - goto process_file_arg -) -if "%~1" == "--file" ( - set "FILE_ARG=%~2" - shift - goto process_file_arg -) -@REM If none of the above, skip the argument -shift -if not "%~1" == "" ( - goto arg_loop -) else ( - goto findBaseDir -) - -:process_file_arg -if "%FILE_ARG%" == "" ( - goto findBaseDir -) -if not exist "%FILE_ARG%" ( - echo POM file "%FILE_ARG%" specified the -f/--file command-line argument does not exist >&2 - goto error -) -if exist "%FILE_ARG%\*" ( - set "POM_DIR=%FILE_ARG%" -) else ( - call :get_directory_from_file "%FILE_ARG%" -) -if not exist "%POM_DIR%" ( - echo Directory "%POM_DIR%" extracted from the -f/--file command-line argument "%FILE_ARG%" does not exist >&2 - goto error -) -set "WDIR=%POM_DIR%" -goto findBaseDir - -:get_directory_from_file -set "POM_DIR=%~dp1" -:stripPomDir -if not "_%POM_DIR:~-1%"=="_\" goto pomDirStripped -set "POM_DIR=%POM_DIR:~0,-1%" -goto stripPomDir -:pomDirStripped -exit /b - -:findBaseDir -cd /d "%WDIR%" -set "WDIR=%CD%" -:findBaseDirLoop -if exist ".mvn" goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set "WDIR=%CD%" -goto findBaseDirLoop - -:baseDirFound -set "MAVEN_PROJECTBASEDIR=%WDIR%" -cd /d "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -if "_%EXEC_DIR:~-1%"=="_\" set "EXEC_DIR=%EXEC_DIR:~0,-1%" -set "MAVEN_PROJECTBASEDIR=%EXEC_DIR%" -cd /d "%EXEC_DIR%" - -:endDetectBaseDir - -set "jvmConfig=\.mvn\jvm.config" -if not exist "%MAVEN_PROJECTBASEDIR%%jvmConfig%" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -for %%i in ("%MAVEN_HOME%"\boot\plexus-classworlds-*) do set CLASSWORLDS_JAR="%%i" -set CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -"%JAVACMD%" ^ - %JVM_CONFIG_MAVEN_PROPS% ^ - %MAVEN_OPTS% ^ - %MAVEN_DEBUG_OPTS% ^ - -classpath %CLASSWORLDS_JAR% ^ - "-Dclassworlds.conf=%MAVEN_HOME%\bin\m2.conf" ^ - "-Dmaven.home=%MAVEN_HOME%" ^ - "-Dlibrary.jansi.path=%MAVEN_HOME%\lib\jansi-native" ^ - "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ - %CLASSWORLDS_LAUNCHER% %MAVEN_ARGS% %MAVEN_CMD_LINE_ARGS% -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" -if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%"=="on" pause - -if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% - -exit /b %ERROR_CODE% diff --git a/apache-maven-3.9.9/bin/mvnDebug b/apache-maven-3.9.9/bin/mvnDebug deleted file mode 100644 index 2d7cafe..0000000 --- a/apache-maven-3.9.9/bin/mvnDebug +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -# ----------------------------------------------------------------------------- -# Apache Maven Debug Script -# -# Environment Variable Prerequisites -# -# JAVA_HOME Must point at your Java Development Kit installation. -# MAVEN_ARGS (Optional) Arguments passed to Maven before CLI arguments. -# MAVEN_OPTS (Optional) Java runtime options used when Maven is executed. -# MAVEN_SKIP_RC (Optional) Flag to disable loading of mavenrc files. -# MAVEN_DEBUG_ADDRESS (Optional) Set the debug address. Default value is 8000 -# ----------------------------------------------------------------------------- - -MAVEN_DEBUG_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=${MAVEN_DEBUG_ADDRESS:-8000}" - -echo Preparing to execute Maven in debug mode - -env MAVEN_OPTS="$MAVEN_OPTS" MAVEN_DEBUG_OPTS="$MAVEN_DEBUG_OPTS" "`dirname "$0"`/mvn" "$@" diff --git a/apache-maven-3.9.9/bin/mvnDebug.cmd b/apache-maven-3.9.9/bin/mvnDebug.cmd deleted file mode 100644 index 9777cf9..0000000 --- a/apache-maven-3.9.9/bin/mvnDebug.cmd +++ /dev/null @@ -1,45 +0,0 @@ -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. - -@REM ----------------------------------------------------------------------------- -@REM Apache Maven Debug Script -@REM -@REM Environment Variable Prerequisites -@REM -@REM JAVA_HOME Must point at your Java Development Kit installation. -@REM MAVEN_ARGS (Optional) Arguments passed to Maven before CLI arguments. -@REM MAVEN_BATCH_ECHO (Optional) Set to 'on' to enable the echoing of the batch commands. -@REM MAVEN_BATCH_PAUSE (Optional) set to 'on' to wait for a key stroke before ending. -@REM MAVEN_OPTS (Optional) Java runtime options used when Maven is executed. -@REM MAVEN_SKIP_RC (Optional) Flag to disable loading of mavenrc files. -@REM MAVEN_DEBUG_ADDRESS (Optional) Set the debug address. Default value is 8000 -@REM ----------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%"=="on" echo %MAVEN_BATCH_ECHO% - -@setlocal - -IF "%MAVEN_DEBUG_ADDRESS%"=="" @set MAVEN_DEBUG_ADDRESS=8000 - -@set MAVEN_DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=%MAVEN_DEBUG_ADDRESS% - -@call "%~dp0"mvn.cmd %* diff --git a/apache-maven-3.9.9/bin/mvnyjp b/apache-maven-3.9.9/bin/mvnyjp deleted file mode 100644 index 6e21a0e..0000000 --- a/apache-maven-3.9.9/bin/mvnyjp +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -# ----------------------------------------------------------------------------- -# Apache Maven YourKit Profiler Startup Script -# -# Environment Variable Prerequisites -# -# JAVA_HOME Must point at your Java Development Kit installation. -# MAVEN_ARGS (Optional) Arguments passed to Maven before CLI arguments. -# MAVEN_OPTS (Optional) Java runtime options used when Maven is executed. -# MAVEN_SKIP_RC (Optional) Flag to disable loading of mavenrc files. -# ----------------------------------------------------------------------------- - -if [ ! -f "$YJPLIB" ]; then - echo "Error: Unable to autodetect the YJP library location. Please set YJPLIB variable" >&2 - exit 1 -fi - -env MAVEN_OPTS="-agentpath:$YJPLIB=onexit=snapshot,onexit=memory,tracing,onlylocal $MAVEN_OPTS" "`dirname "$0"`/mvn" "$@" diff --git a/apache-maven-3.9.9/boot/plexus-classworlds.license b/apache-maven-3.9.9/boot/plexus-classworlds.license deleted file mode 100644 index d645695..0000000 --- a/apache-maven-3.9.9/boot/plexus-classworlds.license +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apache-maven-3.9.9/conf/logging/simplelogger.properties b/apache-maven-3.9.9/conf/logging/simplelogger.properties deleted file mode 100644 index 8c4a5d1..0000000 --- a/apache-maven-3.9.9/conf/logging/simplelogger.properties +++ /dev/null @@ -1,30 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -org.slf4j.simpleLogger.defaultLogLevel=info -org.slf4j.simpleLogger.showDateTime=false -org.slf4j.simpleLogger.showThreadName=false -org.slf4j.simpleLogger.showLogName=false -org.slf4j.simpleLogger.logFile=System.out -org.slf4j.simpleLogger.cacheOutputStream=true -org.slf4j.simpleLogger.levelInBrackets=true -org.slf4j.simpleLogger.log.Sisu=info -org.slf4j.simpleLogger.warnLevelString=WARNING - -# MNG-6181: mvn -X also prints all debug logging from HttpClient -org.slf4j.simpleLogger.log.org.apache.http=off -org.slf4j.simpleLogger.log.org.apache.http.wire=off diff --git a/apache-maven-3.9.9/conf/settings.xml b/apache-maven-3.9.9/conf/settings.xml deleted file mode 100644 index 0d64976..0000000 --- a/apache-maven-3.9.9/conf/settings.xml +++ /dev/null @@ -1,265 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - maven-default-http-blocker - external:http:* - Pseudo repository to mirror external repositories initially using HTTP. - http://0.0.0.0/ - true - - - - - - - - - - - - diff --git a/apache-maven-3.9.9/conf/toolchains.xml b/apache-maven-3.9.9/conf/toolchains.xml deleted file mode 100644 index b263072..0000000 --- a/apache-maven-3.9.9/conf/toolchains.xml +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/apache-maven-3.9.9/lib/aopalliance.license b/apache-maven-3.9.9/lib/aopalliance.license deleted file mode 100644 index a7a158b..0000000 --- a/apache-maven-3.9.9/lib/aopalliance.license +++ /dev/null @@ -1 +0,0 @@ -Public Domain \ No newline at end of file diff --git a/apache-maven-3.9.9/lib/commons-cli.license b/apache-maven-3.9.9/lib/commons-cli.license deleted file mode 100644 index d645695..0000000 --- a/apache-maven-3.9.9/lib/commons-cli.license +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apache-maven-3.9.9/lib/commons-codec.license b/apache-maven-3.9.9/lib/commons-codec.license deleted file mode 100644 index d645695..0000000 --- a/apache-maven-3.9.9/lib/commons-codec.license +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apache-maven-3.9.9/lib/ext/README.txt b/apache-maven-3.9.9/lib/ext/README.txt deleted file mode 100644 index ab7f12a..0000000 --- a/apache-maven-3.9.9/lib/ext/README.txt +++ /dev/null @@ -1,2 +0,0 @@ -Use this directory to add third party extensions to Maven Core. These extensions can either extend or override -Maven's default implementation. diff --git a/apache-maven-3.9.9/lib/ext/hazelcast/README.txt b/apache-maven-3.9.9/lib/ext/hazelcast/README.txt deleted file mode 100644 index 77d19b1..0000000 --- a/apache-maven-3.9.9/lib/ext/hazelcast/README.txt +++ /dev/null @@ -1,6 +0,0 @@ -This directory is intended to contain Hazelcast [1] JARs for Maven Resolver Named Locks using Hazelcast. - -See here [2] on how to add necessary JARs. - -[1] https://github.com/hazelcast/hazelcast -[2] https://maven.apache.org/resolver/maven-resolver-named-locks-hazelcast/index.html#installation-testing diff --git a/apache-maven-3.9.9/lib/ext/redisson/README.txt b/apache-maven-3.9.9/lib/ext/redisson/README.txt deleted file mode 100644 index 58342b1..0000000 --- a/apache-maven-3.9.9/lib/ext/redisson/README.txt +++ /dev/null @@ -1,6 +0,0 @@ -This directory is intended to contain Redisson [1] JARs for Maven Resolver Named Locks using Redisson. - -See here [2] on how to add necessary JARs. - -[1] https://github.com/redisson/redisson -[2] https://maven.apache.org/resolver/maven-resolver-named-locks-redisson/index.html#installation-testing diff --git a/apache-maven-3.9.9/lib/failureaccess.license b/apache-maven-3.9.9/lib/failureaccess.license deleted file mode 100644 index d645695..0000000 --- a/apache-maven-3.9.9/lib/failureaccess.license +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apache-maven-3.9.9/lib/guava.license b/apache-maven-3.9.9/lib/guava.license deleted file mode 100644 index d645695..0000000 --- a/apache-maven-3.9.9/lib/guava.license +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apache-maven-3.9.9/lib/guice.license b/apache-maven-3.9.9/lib/guice.license deleted file mode 100644 index d645695..0000000 --- a/apache-maven-3.9.9/lib/guice.license +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apache-maven-3.9.9/lib/httpclient.license b/apache-maven-3.9.9/lib/httpclient.license deleted file mode 100644 index d645695..0000000 --- a/apache-maven-3.9.9/lib/httpclient.license +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apache-maven-3.9.9/lib/httpcore.license b/apache-maven-3.9.9/lib/httpcore.license deleted file mode 100644 index d645695..0000000 --- a/apache-maven-3.9.9/lib/httpcore.license +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apache-maven-3.9.9/lib/jansi-native/README.txt b/apache-maven-3.9.9/lib/jansi-native/README.txt deleted file mode 100644 index 26a957e..0000000 --- a/apache-maven-3.9.9/lib/jansi-native/README.txt +++ /dev/null @@ -1,8 +0,0 @@ -This directory contains Jansi native libraries extracted from Jansi JAR. - -You can add your own build for platforms not natively supported by Jansi. -See here [1] on how to compile for your platform and and here [2] how libraries -follow Jansi's directory and filename conventions. - -[1] https://github.com/fusesource/jansi/tree/master/src/main/native -[2] https://github.com/fusesource/jansi/blob/321a8ff71c731e10f4ea05c607860180276b2215/src/main/java/org/fusesource/jansi/internal/OSInfo.java diff --git a/apache-maven-3.9.9/lib/jansi-native/Windows/arm64/libjansi.so b/apache-maven-3.9.9/lib/jansi-native/Windows/arm64/libjansi.so deleted file mode 100644 index cce0178..0000000 Binary files a/apache-maven-3.9.9/lib/jansi-native/Windows/arm64/libjansi.so and /dev/null differ diff --git a/apache-maven-3.9.9/lib/jansi-native/Windows/x86/jansi.dll b/apache-maven-3.9.9/lib/jansi-native/Windows/x86/jansi.dll deleted file mode 100644 index 8843d02..0000000 Binary files a/apache-maven-3.9.9/lib/jansi-native/Windows/x86/jansi.dll and /dev/null differ diff --git a/apache-maven-3.9.9/lib/jansi-native/Windows/x86_64/jansi.dll b/apache-maven-3.9.9/lib/jansi-native/Windows/x86_64/jansi.dll deleted file mode 100644 index aeec4e3..0000000 Binary files a/apache-maven-3.9.9/lib/jansi-native/Windows/x86_64/jansi.dll and /dev/null differ diff --git a/apache-maven-3.9.9/lib/jansi.license b/apache-maven-3.9.9/lib/jansi.license deleted file mode 100644 index d645695..0000000 --- a/apache-maven-3.9.9/lib/jansi.license +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apache-maven-3.9.9/lib/javax.annotation-api.license b/apache-maven-3.9.9/lib/javax.annotation-api.license deleted file mode 100644 index b1c74f9..0000000 --- a/apache-maven-3.9.9/lib/javax.annotation-api.license +++ /dev/null @@ -1,759 +0,0 @@ -COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.1 - -1. Definitions. - - 1.1. "Contributor" means each individual or entity that creates or - contributes to the creation of Modifications. - - 1.2. "Contributor Version" means the combination of the Original - Software, prior Modifications used by a Contributor (if any), and - the Modifications made by that particular Contributor. - - 1.3. "Covered Software" means (a) the Original Software, or (b) - Modifications, or (c) the combination of files containing Original - Software with files containing Modifications, in each case including - portions thereof. - - 1.4. "Executable" means the Covered Software in any form other than - Source Code. - - 1.5. "Initial Developer" means the individual or entity that first - makes Original Software available under this License. - - 1.6. "Larger Work" means a work which combines Covered Software or - portions thereof with code not governed by the terms of this License. - - 1.7. "License" means this document. - - 1.8. "Licensable" means having the right to grant, to the maximum - extent possible, whether at the time of the initial grant or - subsequently acquired, any and all of the rights conveyed herein. - - 1.9. "Modifications" means the Source Code and Executable form of - any of the following: - - A. Any file that results from an addition to, deletion from or - modification of the contents of a file containing Original Software - or previous Modifications; - - B. Any new file that contains any part of the Original Software or - previous Modification; or - - C. Any new file that is contributed or otherwise made available - under the terms of this License. - - 1.10. "Original Software" means the Source Code and Executable form - of computer software code that is originally released under this - License. - - 1.11. "Patent Claims" means any patent claim(s), now owned or - hereafter acquired, including without limitation, method, process, - and apparatus claims, in any patent Licensable by grantor. - - 1.12. "Source Code" means (a) the common form of computer software - code in which modifications are made and (b) associated - documentation included in or with such code. - - 1.13. "You" (or "Your") means an individual or a legal entity - exercising rights under, and complying with all of the terms of, - this License. For legal entities, "You" includes any entity which - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants. - - 2.1. The Initial Developer Grant. - - Conditioned upon Your compliance with Section 3.1 below and subject - to third party intellectual property claims, the Initial Developer - hereby grants You a world-wide, royalty-free, non-exclusive license: - - (a) under intellectual property rights (other than patent or - trademark) Licensable by Initial Developer, to use, reproduce, - modify, display, perform, sublicense and distribute the Original - Software (or portions thereof), with or without Modifications, - and/or as part of a Larger Work; and - - (b) under Patent Claims infringed by the making, using or selling of - Original Software, to make, have made, use, practice, sell, and - offer for sale, and/or otherwise dispose of the Original Software - (or portions thereof). - - (c) The licenses granted in Sections 2.1(a) and (b) are effective on - the date Initial Developer first distributes or otherwise makes the - Original Software available to a third party under the terms of this - License. - - (d) Notwithstanding Section 2.1(b) above, no patent license is - granted: (1) for code that You delete from the Original Software, or - (2) for infringements caused by: (i) the modification of the - Original Software, or (ii) the combination of the Original Software - with other software or devices. - - 2.2. Contributor Grant. - - Conditioned upon Your compliance with Section 3.1 below and subject - to third party intellectual property claims, each Contributor hereby - grants You a world-wide, royalty-free, non-exclusive license: - - (a) under intellectual property rights (other than patent or - trademark) Licensable by Contributor to use, reproduce, modify, - display, perform, sublicense and distribute the Modifications - created by such Contributor (or portions thereof), either on an - unmodified basis, with other Modifications, as Covered Software - and/or as part of a Larger Work; and - - (b) under Patent Claims infringed by the making, using, or selling - of Modifications made by that Contributor either alone and/or in - combination with its Contributor Version (or portions of such - combination), to make, use, sell, offer for sale, have made, and/or - otherwise dispose of: (1) Modifications made by that Contributor (or - portions thereof); and (2) the combination of Modifications made by - that Contributor with its Contributor Version (or portions of such - combination). - - (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective - on the date Contributor first distributes or otherwise makes the - Modifications available to a third party. - - (d) Notwithstanding Section 2.2(b) above, no patent license is - granted: (1) for any code that Contributor has deleted from the - Contributor Version; (2) for infringements caused by: (i) third - party modifications of Contributor Version, or (ii) the combination - of Modifications made by that Contributor with other software - (except as part of the Contributor Version) or other devices; or (3) - under Patent Claims infringed by Covered Software in the absence of - Modifications made by that Contributor. - -3. Distribution Obligations. - - 3.1. Availability of Source Code. - - Any Covered Software that You distribute or otherwise make available - in Executable form must also be made available in Source Code form - and that Source Code form must be distributed only under the terms - of this License. You must include a copy of this License with every - copy of the Source Code form of the Covered Software You distribute - or otherwise make available. You must inform recipients of any such - Covered Software in Executable form as to how they can obtain such - Covered Software in Source Code form in a reasonable manner on or - through a medium customarily used for software exchange. - - 3.2. Modifications. - - The Modifications that You create or to which You contribute are - governed by the terms of this License. You represent that You - believe Your Modifications are Your original creation(s) and/or You - have sufficient rights to grant the rights conveyed by this License. - - 3.3. Required Notices. - - You must include a notice in each of Your Modifications that - identifies You as the Contributor of the Modification. You may not - remove or alter any copyright, patent or trademark notices contained - within the Covered Software, or any notices of licensing or any - descriptive text giving attribution to any Contributor or the - Initial Developer. - - 3.4. Application of Additional Terms. - - You may not offer or impose any terms on any Covered Software in - Source Code form that alters or restricts the applicable version of - this License or the recipients' rights hereunder. You may choose to - offer, and to charge a fee for, warranty, support, indemnity or - liability obligations to one or more recipients of Covered Software. - However, you may do so only on Your own behalf, and not on behalf of - the Initial Developer or any Contributor. You must make it - absolutely clear that any such warranty, support, indemnity or - liability obligation is offered by You alone, and You hereby agree - to indemnify the Initial Developer and every Contributor for any - liability incurred by the Initial Developer or such Contributor as a - result of warranty, support, indemnity or liability terms You offer. - - 3.5. Distribution of Executable Versions. - - You may distribute the Executable form of the Covered Software under - the terms of this License or under the terms of a license of Your - choice, which may contain terms different from this License, - provided that You are in compliance with the terms of this License - and that the license for the Executable form does not attempt to - limit or alter the recipient's rights in the Source Code form from - the rights set forth in this License. If You distribute the Covered - Software in Executable form under a different license, You must make - it absolutely clear that any terms which differ from this License - are offered by You alone, not by the Initial Developer or - Contributor. You hereby agree to indemnify the Initial Developer and - every Contributor for any liability incurred by the Initial - Developer or such Contributor as a result of any such terms You offer. - - 3.6. Larger Works. - - You may create a Larger Work by combining Covered Software with - other code not governed by the terms of this License and distribute - the Larger Work as a single product. In such a case, You must make - sure the requirements of this License are fulfilled for the Covered - Software. - -4. Versions of the License. - - 4.1. New Versions. - - Oracle is the initial license steward and may publish revised and/or - new versions of this License from time to time. Each version will be - given a distinguishing version number. Except as provided in Section - 4.3, no one other than the license steward has the right to modify - this License. - - 4.2. Effect of New Versions. - - You may always continue to use, distribute or otherwise make the - Covered Software available under the terms of the version of the - License under which You originally received the Covered Software. If - the Initial Developer includes a notice in the Original Software - prohibiting it from being distributed or otherwise made available - under any subsequent version of the License, You must distribute and - make the Covered Software available under the terms of the version - of the License under which You originally received the Covered - Software. Otherwise, You may also choose to use, distribute or - otherwise make the Covered Software available under the terms of any - subsequent version of the License published by the license steward. - - 4.3. Modified Versions. - - When You are an Initial Developer and You want to create a new - license for Your Original Software, You may create and use a - modified version of this License if You: (a) rename the license and - remove any references to the name of the license steward (except to - note that the license differs from this License); and (b) otherwise - make it clear that the license contains terms which differ from this - License. - -5. DISCLAIMER OF WARRANTY. - - COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, - INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE - IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR - NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF - THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE - DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY - OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, - REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN - ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS - AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. - -6. TERMINATION. - - 6.1. This License and the rights granted hereunder will terminate - automatically if You fail to comply with terms herein and fail to - cure such breach within 30 days of becoming aware of the breach. - Provisions which, by their nature, must remain in effect beyond the - termination of this License shall survive. - - 6.2. If You assert a patent infringement claim (excluding - declaratory judgment actions) against Initial Developer or a - Contributor (the Initial Developer or Contributor against whom You - assert such claim is referred to as "Participant") alleging that the - Participant Software (meaning the Contributor Version where the - Participant is a Contributor or the Original Software where the - Participant is the Initial Developer) directly or indirectly - infringes any patent, then any and all rights granted directly or - indirectly to You by such Participant, the Initial Developer (if the - Initial Developer is not the Participant) and all Contributors under - Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice - from Participant terminate prospectively and automatically at the - expiration of such 60 day notice period, unless if within such 60 - day period You withdraw Your claim with respect to the Participant - Software against such Participant either unilaterally or pursuant to - a written agreement with Participant. - - 6.3. If You assert a patent infringement claim against Participant - alleging that the Participant Software directly or indirectly - infringes any patent where such claim is resolved (such as by - license or settlement) prior to the initiation of patent - infringement litigation, then the reasonable value of the licenses - granted by such Participant under Sections 2.1 or 2.2 shall be taken - into account in determining the amount or value of any payment or - license. - - 6.4. In the event of termination under Sections 6.1 or 6.2 above, - all end user licenses that have been validly granted by You or any - distributor hereunder prior to termination (excluding licenses - granted to You by any distributor) shall survive termination. - -7. LIMITATION OF LIABILITY. - - UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT - (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE - INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF - COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE - TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR - CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT - LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER - FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR - LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE - POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT - APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH - PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH - LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR - LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION - AND LIMITATION MAY NOT APPLY TO YOU. - -8. U.S. GOVERNMENT END USERS. - - The Covered Software is a "commercial item," as that term is defined - in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer - software" (as that term is defined at 48 C.F.R. § - 252.227-7014(a)(1)) and "commercial computer software documentation" - as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent - with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 - (June 1995), all U.S. Government End Users acquire Covered Software - with only those rights set forth herein. This U.S. Government Rights - clause is in lieu of, and supersedes, any other FAR, DFAR, or other - clause or provision that addresses Government rights in computer - software under this License. - -9. MISCELLANEOUS. - - This License represents the complete agreement concerning subject - matter hereof. If any provision of this License is held to be - unenforceable, such provision shall be reformed only to the extent - necessary to make it enforceable. This License shall be governed by - the law of the jurisdiction specified in a notice contained within - the Original Software (except to the extent applicable law, if any, - provides otherwise), excluding such jurisdiction's conflict-of-law - provisions. Any litigation relating to this License shall be subject - to the jurisdiction of the courts located in the jurisdiction and - venue specified in a notice contained within the Original Software, - with the losing party responsible for costs, including, without - limitation, court costs and reasonable attorneys' fees and expenses. - The application of the United Nations Convention on Contracts for - the International Sale of Goods is expressly excluded. Any law or - regulation which provides that the language of a contract shall be - construed against the drafter shall not apply to this License. You - agree that You alone are responsible for compliance with the United - States export administration regulations (and the export control - laws and regulation of any other countries) when You use, distribute - or otherwise make available any Covered Software. - -10. RESPONSIBILITY FOR CLAIMS. - - As between Initial Developer and the Contributors, each party is - responsible for claims and damages arising, directly or indirectly, - out of its utilization of rights under this License and You agree to - work with Initial Developer and Contributors to distribute such - responsibility on an equitable basis. Nothing herein is intended or - shall be deemed to constitute any admission of liability. - ------------------------------------------------------------------------- - -NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION -LICENSE (CDDL) - -The code released under the CDDL shall be governed by the laws of the -State of California (excluding conflict-of-law provisions). Any -litigation relating to this License shall be subject to the jurisdiction -of the Federal Courts of the Northern District of California and the -state courts of the State of California, with venue lying in Santa Clara -County, California. - - - - The GNU General Public License (GPL) Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor -Boston, MA 02110-1335 -USA - -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. - -Preamble - -The licenses for most software are designed to take away your freedom to -share and change it. By contrast, the GNU General Public License is -intended to guarantee your freedom to share and change free software--to -make sure the software is free for all its users. This General Public -License applies to most of the Free Software Foundation's software and -to any other program whose authors commit to using it. (Some other Free -Software Foundation software is covered by the GNU Library General -Public License instead.) You can apply it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. -Our General Public Licenses are designed to make sure that you have the -freedom to distribute copies of free software (and charge for this -service if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs; and that you know you can do these things. - -To protect your rights, we need to make restrictions that forbid anyone -to deny you these rights or to ask you to surrender the rights. These -restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis -or for a fee, you must give the recipients all the rights that you have. -You must make sure that they, too, receive or can get the source code. -And you must show them these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - -Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - -Finally, any free program is threatened constantly by software patents. -We wish to avoid the danger that redistributors of a free program will -individually obtain patent licenses, in effect making the program -proprietary. To prevent this, we have made it clear that any patent must -be licensed for everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and -modification follow. - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License applies to any program or other work which contains a -notice placed by the copyright holder saying it may be distributed under -the terms of this General Public License. The "Program", below, refers -to any such program or work, and a "work based on the Program" means -either the Program or any derivative work under copyright law: that is -to say, a work containing the Program or a portion of it, either -verbatim or with modifications and/or translated into another language. -(Hereinafter, translation is included without limitation in the term -"modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of running -the Program is not restricted, and the output from the Program is -covered only if its contents constitute a work based on the Program -(independent of having been made by running the Program). Whether that -is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program's source -code as you receive it, in any medium, provided that you conspicuously -and appropriately publish on each copy an appropriate copyright notice -and disclaimer of warranty; keep intact all the notices that refer to -this License and to the absence of any warranty; and give any other -recipients of the Program a copy of this License along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion of -it, thus forming a work based on the Program, and copy and distribute -such modifications or work under the terms of Section 1 above, provided -that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any part - thereof, to be licensed as a whole at no charge to all third parties - under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a notice - that there is no warranty (or else, saying that you provide a - warranty) and that users may redistribute the program under these - conditions, and telling the user how to view a copy of this License. - (Exception: if the Program itself is interactive but does not - normally print such an announcement, your work based on the Program - is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, and -can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based on -the Program, the distribution of the whole must be on the terms of this -License, whose permissions for other licensees extend to the entire -whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of a -storage or distribution medium does not bring the other work under the -scope of this License. - -3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections 1 - and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your cost - of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer to - distribute corresponding source code. (This alternative is allowed - only for noncommercial distribution and only if you received the - program in object code or executable form with such an offer, in - accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source code -means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to control -compilation and installation of the executable. However, as a special -exception, the source code distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies the -executable. - -If distribution of executable or object code is made by offering access -to copy from a designated place, then offering equivalent access to copy -the source code from the same place counts as distribution of the source -code, even though third parties are not compelled to copy the source -along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt otherwise -to copy, modify, sublicense or distribute the Program is void, and will -automatically terminate your rights under this License. However, parties -who have received copies, or rights, from you under this License will -not have their licenses terminated so long as such parties remain in -full compliance. - -5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and all -its terms and conditions for copying, distributing or modifying the -Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further restrictions -on the recipients' exercise of the rights granted herein. You are not -responsible for enforcing compliance by third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot distribute -so as to satisfy simultaneously your obligations under this License and -any other pertinent obligations, then as a consequence you may not -distribute the Program at all. For example, if a patent license would -not permit royalty-free redistribution of the Program by all those who -receive copies directly or indirectly through you, then the only way you -could satisfy both it and this License would be to refrain entirely from -distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is implemented -by public license practices. Many people have made generous -contributions to the wide range of software distributed through that -system in reliance on consistent application of that system; it is up to -the author/donor to decide if he or she is willing to distribute -software through any other system and a licensee cannot impose that choice. - -This section is intended to make thoroughly clear what is believed to be -a consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License may -add an explicit geographical distribution limitation excluding those -countries, so that distribution is permitted only in or among countries -not thus excluded. In such case, this License incorporates the -limitation as if written in the body of this License. - -9. The Free Software Foundation may publish revised and/or new -versions of the General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Program does not specify a version -number of this License, you may choose any version ever published by the -Free Software Foundation. - -10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the -author to ask for permission. For software which is copyrighted by the -Free Software Foundation, write to the Free Software Foundation; we -sometimes make exceptions for this. Our decision will be guided by the -two goals of preserving the free status of all derivatives of our free -software and of promoting the sharing and reuse of software generally. - -NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, -EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE -ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH -YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL -NECESSARY SERVICING, REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR -DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL -DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM -(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED -INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF -THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR -OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to -attach them to the start of each source file to most effectively convey -the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - One line to give the program's name and a brief idea of what it does. - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type - `show w'. This is free software, and you are welcome to redistribute - it under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the -appropriate parts of the General Public License. Of course, the commands -you use may be called something other than `show w' and `show c'; they -could even be mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - program `Gnomovision' (which makes passes at compilers) written by - James Hacker. - - signature of Ty Coon, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications -with the library. If this is what you want to do, use the GNU Library -General Public License instead of this License. - -# - -Certain source files distributed by Oracle America, Inc. and/or its -affiliates are subject to the following clarification and special -exception to the GPLv2, based on the GNU Project exception for its -Classpath libraries, known as the GNU Classpath Exception, but only -where Oracle has expressly included in the particular source file's -header the words "Oracle designates this particular file as subject to -the "Classpath" exception as provided by Oracle in the LICENSE file -that accompanied this code." - -You should also note that Oracle includes multiple, independent -programs in this software package. Some of those programs are provided -under licenses deemed incompatible with the GPLv2 by the Free Software -Foundation and others. For example, the package includes programs -licensed under the Apache License, Version 2.0. Such programs are -licensed to you under their original licenses. - -Oracle facilitates your further distribution of this package by adding -the Classpath Exception to the necessary parts of its GPLv2 code, which -permits you to use that code in combination with other independent -modules not licensed under the GPLv2. However, note that this would -not permit you to commingle code under an incompatible license with -Oracle's GPLv2 licensed code by, for example, cutting and pasting such -code into a file also containing Oracle's GPLv2 licensed code and then -distributing the result. Additionally, if you were to remove the -Classpath Exception from any of the files to which it applies and -distribute the result, you would likely be required to license some or -all of the other code in that distribution under the GPLv2 as well, and -since the GPLv2 is incompatible with the license terms of some items -included in the distribution by Oracle, removing the Classpath -Exception could therefore effectively compromise your ability to -further distribute the package. - -Proceed with caution and we recommend that you obtain the advice of a -lawyer skilled in open source matters before removing the Classpath -Exception or making modifications to this package which may -subsequently be redistributed and/or involve the use of third party -software. - -CLASSPATH EXCEPTION -Linking this library statically or dynamically with other modules is -making a combined work based on this library. Thus, the terms and -conditions of the GNU General Public License version 2 cover the whole -combination. - -As a special exception, the copyright holders of this library give you -permission to link this library with independent modules to produce an -executable, regardless of the license terms of these independent -modules, and to copy and distribute the resulting executable under -terms of your choice, provided that you also meet, for each linked -independent module, the terms and conditions of the license of that -module. An independent module is a module which is not derived from or -based on this library. If you modify this library, you may extend this -exception to your version of the library, but you are not obligated to -do so. If you do not wish to do so, delete this exception statement -from your version. diff --git a/apache-maven-3.9.9/lib/javax.inject.license b/apache-maven-3.9.9/lib/javax.inject.license deleted file mode 100644 index d645695..0000000 --- a/apache-maven-3.9.9/lib/javax.inject.license +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apache-maven-3.9.9/lib/jcl-over-slf4j.license b/apache-maven-3.9.9/lib/jcl-over-slf4j.license deleted file mode 100644 index d645695..0000000 --- a/apache-maven-3.9.9/lib/jcl-over-slf4j.license +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apache-maven-3.9.9/lib/org.eclipse.sisu.inject.license b/apache-maven-3.9.9/lib/org.eclipse.sisu.inject.license deleted file mode 100644 index e55f344..0000000 --- a/apache-maven-3.9.9/lib/org.eclipse.sisu.inject.license +++ /dev/null @@ -1,277 +0,0 @@ -Eclipse Public License - v 2.0 - - THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE - PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION - OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. - -1. DEFINITIONS - -"Contribution" means: - - a) in the case of the initial Contributor, the initial content - Distributed under this Agreement, and - - b) in the case of each subsequent Contributor: - i) changes to the Program, and - ii) additions to the Program; - where such changes and/or additions to the Program originate from - and are Distributed by that particular Contributor. A Contribution - "originates" from a Contributor if it was added to the Program by - such Contributor itself or anyone acting on such Contributor's behalf. - Contributions do not include changes or additions to the Program that - are not Modified Works. - -"Contributor" means any person or entity that Distributes the Program. - -"Licensed Patents" mean patent claims licensable by a Contributor which -are necessarily infringed by the use or sale of its Contribution alone -or when combined with the Program. - -"Program" means the Contributions Distributed in accordance with this -Agreement. - -"Recipient" means anyone who receives the Program under this Agreement -or any Secondary License (as applicable), including Contributors. - -"Derivative Works" shall mean any work, whether in Source Code or other -form, that is based on (or derived from) the Program and for which the -editorial revisions, annotations, elaborations, or other modifications -represent, as a whole, an original work of authorship. - -"Modified Works" shall mean any work in Source Code or other form that -results from an addition to, deletion from, or modification of the -contents of the Program, including, for purposes of clarity any new file -in Source Code form that contains any contents of the Program. Modified -Works shall not include works that contain only declarations, -interfaces, types, classes, structures, or files of the Program solely -in each case in order to link to, bind by name, or subclass the Program -or Modified Works thereof. - -"Distribute" means the acts of a) distributing or b) making available -in any manner that enables the transfer of a copy. - -"Source Code" means the form of a Program preferred for making -modifications, including but not limited to software source code, -documentation source, and configuration files. - -"Secondary License" means either the GNU General Public License, -Version 2.0, or any later versions of that license, including any -exceptions or additional permissions as identified by the initial -Contributor. - -2. GRANT OF RIGHTS - - a) Subject to the terms of this Agreement, each Contributor hereby - grants Recipient a non-exclusive, worldwide, royalty-free copyright - license to reproduce, prepare Derivative Works of, publicly display, - publicly perform, Distribute and sublicense the Contribution of such - Contributor, if any, and such Derivative Works. - - b) Subject to the terms of this Agreement, each Contributor hereby - grants Recipient a non-exclusive, worldwide, royalty-free patent - license under Licensed Patents to make, use, sell, offer to sell, - import and otherwise transfer the Contribution of such Contributor, - if any, in Source Code or other form. This patent license shall - apply to the combination of the Contribution and the Program if, at - the time the Contribution is added by the Contributor, such addition - of the Contribution causes such combination to be covered by the - Licensed Patents. The patent license shall not apply to any other - combinations which include the Contribution. No hardware per se is - licensed hereunder. - - c) Recipient understands that although each Contributor grants the - licenses to its Contributions set forth herein, no assurances are - provided by any Contributor that the Program does not infringe the - patent or other intellectual property rights of any other entity. - Each Contributor disclaims any liability to Recipient for claims - brought by any other entity based on infringement of intellectual - property rights or otherwise. As a condition to exercising the - rights and licenses granted hereunder, each Recipient hereby - assumes sole responsibility to secure any other intellectual - property rights needed, if any. For example, if a third party - patent license is required to allow Recipient to Distribute the - Program, it is Recipient's responsibility to acquire that license - before distributing the Program. - - d) Each Contributor represents that to its knowledge it has - sufficient copyright rights in its Contribution, if any, to grant - the copyright license set forth in this Agreement. - - e) Notwithstanding the terms of any Secondary License, no - Contributor makes additional grants to any Recipient (other than - those set forth in this Agreement) as a result of such Recipient's - receipt of the Program under the terms of a Secondary License - (if permitted under the terms of Section 3). - -3. REQUIREMENTS - -3.1 If a Contributor Distributes the Program in any form, then: - - a) the Program must also be made available as Source Code, in - accordance with section 3.2, and the Contributor must accompany - the Program with a statement that the Source Code for the Program - is available under this Agreement, and informs Recipients how to - obtain it in a reasonable manner on or through a medium customarily - used for software exchange; and - - b) the Contributor may Distribute the Program under a license - different than this Agreement, provided that such license: - i) effectively disclaims on behalf of all other Contributors all - warranties and conditions, express and implied, including - warranties or conditions of title and non-infringement, and - implied warranties or conditions of merchantability and fitness - for a particular purpose; - - ii) effectively excludes on behalf of all other Contributors all - liability for damages, including direct, indirect, special, - incidental and consequential damages, such as lost profits; - - iii) does not attempt to limit or alter the recipients' rights - in the Source Code under section 3.2; and - - iv) requires any subsequent distribution of the Program by any - party to be under a license that satisfies the requirements - of this section 3. - -3.2 When the Program is Distributed as Source Code: - - a) it must be made available under this Agreement, or if the - Program (i) is combined with other material in a separate file or - files made available under a Secondary License, and (ii) the initial - Contributor attached to the Source Code the notice described in - Exhibit A of this Agreement, then the Program may be made available - under the terms of such Secondary Licenses, and - - b) a copy of this Agreement must be included with each copy of - the Program. - -3.3 Contributors may not remove or alter any copyright, patent, -trademark, attribution notices, disclaimers of warranty, or limitations -of liability ("notices") contained within the Program from any copy of -the Program which they Distribute, provided that Contributors may add -their own appropriate notices. - -4. COMMERCIAL DISTRIBUTION - -Commercial distributors of software may accept certain responsibilities -with respect to end users, business partners and the like. While this -license is intended to facilitate the commercial use of the Program, -the Contributor who includes the Program in a commercial product -offering should do so in a manner which does not create potential -liability for other Contributors. Therefore, if a Contributor includes -the Program in a commercial product offering, such Contributor -("Commercial Contributor") hereby agrees to defend and indemnify every -other Contributor ("Indemnified Contributor") against any losses, -damages and costs (collectively "Losses") arising from claims, lawsuits -and other legal actions brought by a third party against the Indemnified -Contributor to the extent caused by the acts or omissions of such -Commercial Contributor in connection with its distribution of the Program -in a commercial product offering. The obligations in this section do not -apply to any claims or Losses relating to any actual or alleged -intellectual property infringement. In order to qualify, an Indemnified -Contributor must: a) promptly notify the Commercial Contributor in -writing of such claim, and b) allow the Commercial Contributor to control, -and cooperate with the Commercial Contributor in, the defense and any -related settlement negotiations. The Indemnified Contributor may -participate in any such claim at its own expense. - -For example, a Contributor might include the Program in a commercial -product offering, Product X. That Contributor is then a Commercial -Contributor. If that Commercial Contributor then makes performance -claims, or offers warranties related to Product X, those performance -claims and warranties are such Commercial Contributor's responsibility -alone. Under this section, the Commercial Contributor would have to -defend claims against the other Contributors related to those performance -claims and warranties, and if a court requires any other Contributor to -pay any damages as a result, the Commercial Contributor must pay -those damages. - -5. NO WARRANTY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT -PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" -BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR -IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF -TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR -PURPOSE. Each Recipient is solely responsible for determining the -appropriateness of using and distributing the Program and assumes all -risks associated with its exercise of rights under this Agreement, -including but not limited to the risks and costs of program errors, -compliance with applicable laws, damage to or loss of data, programs -or equipment, and unavailability or interruption of operations. - -6. DISCLAIMER OF LIABILITY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT -PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS -SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST -PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE -EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - -7. GENERAL - -If any provision of this Agreement is invalid or unenforceable under -applicable law, it shall not affect the validity or enforceability of -the remainder of the terms of this Agreement, and without further -action by the parties hereto, such provision shall be reformed to the -minimum extent necessary to make such provision valid and enforceable. - -If Recipient institutes patent litigation against any entity -(including a cross-claim or counterclaim in a lawsuit) alleging that the -Program itself (excluding combinations of the Program with other software -or hardware) infringes such Recipient's patent(s), then such Recipient's -rights granted under Section 2(b) shall terminate as of the date such -litigation is filed. - -All Recipient's rights under this Agreement shall terminate if it -fails to comply with any of the material terms or conditions of this -Agreement and does not cure such failure in a reasonable period of -time after becoming aware of such noncompliance. If all Recipient's -rights under this Agreement terminate, Recipient agrees to cease use -and distribution of the Program as soon as reasonably practicable. -However, Recipient's obligations under this Agreement and any licenses -granted by Recipient relating to the Program shall continue and survive. - -Everyone is permitted to copy and distribute copies of this Agreement, -but in order to avoid inconsistency the Agreement is copyrighted and -may only be modified in the following manner. The Agreement Steward -reserves the right to publish new versions (including revisions) of -this Agreement from time to time. No one other than the Agreement -Steward has the right to modify this Agreement. The Eclipse Foundation -is the initial Agreement Steward. The Eclipse Foundation may assign the -responsibility to serve as the Agreement Steward to a suitable separate -entity. Each new version of the Agreement will be given a distinguishing -version number. The Program (including Contributions) may always be -Distributed subject to the version of the Agreement under which it was -received. In addition, after a new version of the Agreement is published, -Contributor may elect to Distribute the Program (including its -Contributions) under the new version. - -Except as expressly stated in Sections 2(a) and 2(b) above, Recipient -receives no rights or licenses to the intellectual property of any -Contributor under this Agreement, whether expressly, by implication, -estoppel or otherwise. All rights in the Program not expressly granted -under this Agreement are reserved. Nothing in this Agreement is intended -to be enforceable by any entity that is not a Contributor or Recipient. -No third-party beneficiary rights are created under this Agreement. - -Exhibit A - Form of Secondary Licenses Notice - -"This Source Code may also be made available under the following -Secondary Licenses when the conditions for such availability set forth -in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), -version(s), and exceptions or additional permissions here}." - - Simply including a copy of this Agreement, including this Exhibit A - is not sufficient to license the Source Code under Secondary Licenses. - - If it is not possible or desirable to put the notice in a particular - file, then You may include the notice in a location (such as a LICENSE - file in a relevant directory) where a recipient would be likely to - look for such a notice. - - You may add additional accurate notices of copyright ownership. \ No newline at end of file diff --git a/apache-maven-3.9.9/lib/org.eclipse.sisu.plexus.license b/apache-maven-3.9.9/lib/org.eclipse.sisu.plexus.license deleted file mode 100644 index e55f344..0000000 --- a/apache-maven-3.9.9/lib/org.eclipse.sisu.plexus.license +++ /dev/null @@ -1,277 +0,0 @@ -Eclipse Public License - v 2.0 - - THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE - PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION - OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. - -1. DEFINITIONS - -"Contribution" means: - - a) in the case of the initial Contributor, the initial content - Distributed under this Agreement, and - - b) in the case of each subsequent Contributor: - i) changes to the Program, and - ii) additions to the Program; - where such changes and/or additions to the Program originate from - and are Distributed by that particular Contributor. A Contribution - "originates" from a Contributor if it was added to the Program by - such Contributor itself or anyone acting on such Contributor's behalf. - Contributions do not include changes or additions to the Program that - are not Modified Works. - -"Contributor" means any person or entity that Distributes the Program. - -"Licensed Patents" mean patent claims licensable by a Contributor which -are necessarily infringed by the use or sale of its Contribution alone -or when combined with the Program. - -"Program" means the Contributions Distributed in accordance with this -Agreement. - -"Recipient" means anyone who receives the Program under this Agreement -or any Secondary License (as applicable), including Contributors. - -"Derivative Works" shall mean any work, whether in Source Code or other -form, that is based on (or derived from) the Program and for which the -editorial revisions, annotations, elaborations, or other modifications -represent, as a whole, an original work of authorship. - -"Modified Works" shall mean any work in Source Code or other form that -results from an addition to, deletion from, or modification of the -contents of the Program, including, for purposes of clarity any new file -in Source Code form that contains any contents of the Program. Modified -Works shall not include works that contain only declarations, -interfaces, types, classes, structures, or files of the Program solely -in each case in order to link to, bind by name, or subclass the Program -or Modified Works thereof. - -"Distribute" means the acts of a) distributing or b) making available -in any manner that enables the transfer of a copy. - -"Source Code" means the form of a Program preferred for making -modifications, including but not limited to software source code, -documentation source, and configuration files. - -"Secondary License" means either the GNU General Public License, -Version 2.0, or any later versions of that license, including any -exceptions or additional permissions as identified by the initial -Contributor. - -2. GRANT OF RIGHTS - - a) Subject to the terms of this Agreement, each Contributor hereby - grants Recipient a non-exclusive, worldwide, royalty-free copyright - license to reproduce, prepare Derivative Works of, publicly display, - publicly perform, Distribute and sublicense the Contribution of such - Contributor, if any, and such Derivative Works. - - b) Subject to the terms of this Agreement, each Contributor hereby - grants Recipient a non-exclusive, worldwide, royalty-free patent - license under Licensed Patents to make, use, sell, offer to sell, - import and otherwise transfer the Contribution of such Contributor, - if any, in Source Code or other form. This patent license shall - apply to the combination of the Contribution and the Program if, at - the time the Contribution is added by the Contributor, such addition - of the Contribution causes such combination to be covered by the - Licensed Patents. The patent license shall not apply to any other - combinations which include the Contribution. No hardware per se is - licensed hereunder. - - c) Recipient understands that although each Contributor grants the - licenses to its Contributions set forth herein, no assurances are - provided by any Contributor that the Program does not infringe the - patent or other intellectual property rights of any other entity. - Each Contributor disclaims any liability to Recipient for claims - brought by any other entity based on infringement of intellectual - property rights or otherwise. As a condition to exercising the - rights and licenses granted hereunder, each Recipient hereby - assumes sole responsibility to secure any other intellectual - property rights needed, if any. For example, if a third party - patent license is required to allow Recipient to Distribute the - Program, it is Recipient's responsibility to acquire that license - before distributing the Program. - - d) Each Contributor represents that to its knowledge it has - sufficient copyright rights in its Contribution, if any, to grant - the copyright license set forth in this Agreement. - - e) Notwithstanding the terms of any Secondary License, no - Contributor makes additional grants to any Recipient (other than - those set forth in this Agreement) as a result of such Recipient's - receipt of the Program under the terms of a Secondary License - (if permitted under the terms of Section 3). - -3. REQUIREMENTS - -3.1 If a Contributor Distributes the Program in any form, then: - - a) the Program must also be made available as Source Code, in - accordance with section 3.2, and the Contributor must accompany - the Program with a statement that the Source Code for the Program - is available under this Agreement, and informs Recipients how to - obtain it in a reasonable manner on or through a medium customarily - used for software exchange; and - - b) the Contributor may Distribute the Program under a license - different than this Agreement, provided that such license: - i) effectively disclaims on behalf of all other Contributors all - warranties and conditions, express and implied, including - warranties or conditions of title and non-infringement, and - implied warranties or conditions of merchantability and fitness - for a particular purpose; - - ii) effectively excludes on behalf of all other Contributors all - liability for damages, including direct, indirect, special, - incidental and consequential damages, such as lost profits; - - iii) does not attempt to limit or alter the recipients' rights - in the Source Code under section 3.2; and - - iv) requires any subsequent distribution of the Program by any - party to be under a license that satisfies the requirements - of this section 3. - -3.2 When the Program is Distributed as Source Code: - - a) it must be made available under this Agreement, or if the - Program (i) is combined with other material in a separate file or - files made available under a Secondary License, and (ii) the initial - Contributor attached to the Source Code the notice described in - Exhibit A of this Agreement, then the Program may be made available - under the terms of such Secondary Licenses, and - - b) a copy of this Agreement must be included with each copy of - the Program. - -3.3 Contributors may not remove or alter any copyright, patent, -trademark, attribution notices, disclaimers of warranty, or limitations -of liability ("notices") contained within the Program from any copy of -the Program which they Distribute, provided that Contributors may add -their own appropriate notices. - -4. COMMERCIAL DISTRIBUTION - -Commercial distributors of software may accept certain responsibilities -with respect to end users, business partners and the like. While this -license is intended to facilitate the commercial use of the Program, -the Contributor who includes the Program in a commercial product -offering should do so in a manner which does not create potential -liability for other Contributors. Therefore, if a Contributor includes -the Program in a commercial product offering, such Contributor -("Commercial Contributor") hereby agrees to defend and indemnify every -other Contributor ("Indemnified Contributor") against any losses, -damages and costs (collectively "Losses") arising from claims, lawsuits -and other legal actions brought by a third party against the Indemnified -Contributor to the extent caused by the acts or omissions of such -Commercial Contributor in connection with its distribution of the Program -in a commercial product offering. The obligations in this section do not -apply to any claims or Losses relating to any actual or alleged -intellectual property infringement. In order to qualify, an Indemnified -Contributor must: a) promptly notify the Commercial Contributor in -writing of such claim, and b) allow the Commercial Contributor to control, -and cooperate with the Commercial Contributor in, the defense and any -related settlement negotiations. The Indemnified Contributor may -participate in any such claim at its own expense. - -For example, a Contributor might include the Program in a commercial -product offering, Product X. That Contributor is then a Commercial -Contributor. If that Commercial Contributor then makes performance -claims, or offers warranties related to Product X, those performance -claims and warranties are such Commercial Contributor's responsibility -alone. Under this section, the Commercial Contributor would have to -defend claims against the other Contributors related to those performance -claims and warranties, and if a court requires any other Contributor to -pay any damages as a result, the Commercial Contributor must pay -those damages. - -5. NO WARRANTY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT -PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" -BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR -IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF -TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR -PURPOSE. Each Recipient is solely responsible for determining the -appropriateness of using and distributing the Program and assumes all -risks associated with its exercise of rights under this Agreement, -including but not limited to the risks and costs of program errors, -compliance with applicable laws, damage to or loss of data, programs -or equipment, and unavailability or interruption of operations. - -6. DISCLAIMER OF LIABILITY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT -PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS -SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST -PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE -EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - -7. GENERAL - -If any provision of this Agreement is invalid or unenforceable under -applicable law, it shall not affect the validity or enforceability of -the remainder of the terms of this Agreement, and without further -action by the parties hereto, such provision shall be reformed to the -minimum extent necessary to make such provision valid and enforceable. - -If Recipient institutes patent litigation against any entity -(including a cross-claim or counterclaim in a lawsuit) alleging that the -Program itself (excluding combinations of the Program with other software -or hardware) infringes such Recipient's patent(s), then such Recipient's -rights granted under Section 2(b) shall terminate as of the date such -litigation is filed. - -All Recipient's rights under this Agreement shall terminate if it -fails to comply with any of the material terms or conditions of this -Agreement and does not cure such failure in a reasonable period of -time after becoming aware of such noncompliance. If all Recipient's -rights under this Agreement terminate, Recipient agrees to cease use -and distribution of the Program as soon as reasonably practicable. -However, Recipient's obligations under this Agreement and any licenses -granted by Recipient relating to the Program shall continue and survive. - -Everyone is permitted to copy and distribute copies of this Agreement, -but in order to avoid inconsistency the Agreement is copyrighted and -may only be modified in the following manner. The Agreement Steward -reserves the right to publish new versions (including revisions) of -this Agreement from time to time. No one other than the Agreement -Steward has the right to modify this Agreement. The Eclipse Foundation -is the initial Agreement Steward. The Eclipse Foundation may assign the -responsibility to serve as the Agreement Steward to a suitable separate -entity. Each new version of the Agreement will be given a distinguishing -version number. The Program (including Contributions) may always be -Distributed subject to the version of the Agreement under which it was -received. In addition, after a new version of the Agreement is published, -Contributor may elect to Distribute the Program (including its -Contributions) under the new version. - -Except as expressly stated in Sections 2(a) and 2(b) above, Recipient -receives no rights or licenses to the intellectual property of any -Contributor under this Agreement, whether expressly, by implication, -estoppel or otherwise. All rights in the Program not expressly granted -under this Agreement are reserved. Nothing in this Agreement is intended -to be enforceable by any entity that is not a Contributor or Recipient. -No third-party beneficiary rights are created under this Agreement. - -Exhibit A - Form of Secondary Licenses Notice - -"This Source Code may also be made available under the following -Secondary Licenses when the conditions for such availability set forth -in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), -version(s), and exceptions or additional permissions here}." - - Simply including a copy of this Agreement, including this Exhibit A - is not sufficient to license the Source Code under Secondary Licenses. - - If it is not possible or desirable to put the notice in a particular - file, then You may include the notice in a location (such as a LICENSE - file in a relevant directory) where a recipient would be likely to - look for such a notice. - - You may add additional accurate notices of copyright ownership. \ No newline at end of file diff --git a/apache-maven-3.9.9/lib/plexus-cipher.license b/apache-maven-3.9.9/lib/plexus-cipher.license deleted file mode 100644 index d645695..0000000 --- a/apache-maven-3.9.9/lib/plexus-cipher.license +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apache-maven-3.9.9/lib/plexus-component-annotations.license b/apache-maven-3.9.9/lib/plexus-component-annotations.license deleted file mode 100644 index d645695..0000000 --- a/apache-maven-3.9.9/lib/plexus-component-annotations.license +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apache-maven-3.9.9/lib/plexus-interpolation.license b/apache-maven-3.9.9/lib/plexus-interpolation.license deleted file mode 100644 index d645695..0000000 --- a/apache-maven-3.9.9/lib/plexus-interpolation.license +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apache-maven-3.9.9/lib/plexus-sec-dispatcher.license b/apache-maven-3.9.9/lib/plexus-sec-dispatcher.license deleted file mode 100644 index d645695..0000000 --- a/apache-maven-3.9.9/lib/plexus-sec-dispatcher.license +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apache-maven-3.9.9/lib/plexus-utils.license b/apache-maven-3.9.9/lib/plexus-utils.license deleted file mode 100644 index d645695..0000000 --- a/apache-maven-3.9.9/lib/plexus-utils.license +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apache-maven-3.9.9/lib/plexus-xml.license b/apache-maven-3.9.9/lib/plexus-xml.license deleted file mode 100644 index d645695..0000000 --- a/apache-maven-3.9.9/lib/plexus-xml.license +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/apache-maven-3.9.9/lib/slf4j-api.license b/apache-maven-3.9.9/lib/slf4j-api.license deleted file mode 100644 index 1a3d053..0000000 --- a/apache-maven-3.9.9/lib/slf4j-api.license +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2004-2022 QOS.ch Sarl (Switzerland) -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - diff --git a/data/auction.db b/data/auction.db deleted file mode 100644 index 000a502..0000000 Binary files a/data/auction.db and /dev/null differ diff --git a/data/auction.db.sqlite b/data/auction.db.sqlite deleted file mode 100644 index 6c50147..0000000 Binary files a/data/auction.db.sqlite and /dev/null differ diff --git a/data/data.txt b/data/data.txt deleted file mode 100644 index e69de29..0000000 diff --git a/data/rtdas.db b/data/rtdas.db deleted file mode 100644 index 5b7b2b7..0000000 Binary files a/data/rtdas.db and /dev/null differ diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml deleted file mode 100644 index 2a80411..0000000 --- a/dependency-reduced-pom.xml +++ /dev/null @@ -1,91 +0,0 @@ - - - 4.0.0 - com.auction - rtdas - Real-Time Distributed Auction System - 1.0.0 - Distributed multi-user English auction platform using Java RMI and JavaFX - - - - maven-compiler-plugin - 3.12.1 - - 17 - 17 - false - - - - org.openjfx - javafx-maven-plugin - 0.0.8 - - com.auction.client.core.ClientLauncher - - - - org.codehaus.mojo - exec-maven-plugin - 3.1.1 - - com.auction.server.core.ServerLauncher - - - - maven-surefire-plugin - 3.2.5 - - - maven-shade-plugin - 3.5.1 - - - package - - shade - - - - - com.auction.client.core.ClientLauncher - - - - - - - - - - - org.junit.jupiter - junit-jupiter - 5.10.2 - test - - - junit-jupiter-api - org.junit.jupiter - - - junit-jupiter-params - org.junit.jupiter - - - junit-jupiter-engine - org.junit.jupiter - - - - - - 17 - 17 - UTF-8 - 17.0.11 - 5.10.2 - 3.45.1.0 - - diff --git a/exports/exports.txt b/exports/exports.txt deleted file mode 100644 index e69de29..0000000 diff --git a/exports/my_auctions_export.csv b/exports/my_auctions_export.csv deleted file mode 100644 index 0a45b3e..0000000 --- a/exports/my_auctions_export.csv +++ /dev/null @@ -1 +0,0 @@ -AuctionID,Title,Category,StartingPrice,FinalPrice,Winner,Status,StartTime,EndTime diff --git a/image copy.png b/image copy.png deleted file mode 100644 index 8b46a1d..0000000 Binary files a/image copy.png and /dev/null differ diff --git a/image.png b/image.png deleted file mode 100644 index 50c21fa..0000000 Binary files a/image.png and /dev/null differ diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..bd8896b --- /dev/null +++ b/mvnw @@ -0,0 +1,295 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.4 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +scriptDir="$(dirname "$0")" +scriptName="$(basename "$0")" + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +actualDistributionDir="" + +# First try the expected directory name (for regular distributions) +if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then + if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then + actualDistributionDir="$distributionUrlNameMain" + fi +fi + +# If not found, search for any directory with the Maven executable (for snapshots) +if [ -z "$actualDistributionDir" ]; then + # enable globbing to iterate over items + set +f + for dir in "$TMP_DOWNLOAD_DIR"/*; do + if [ -d "$dir" ]; then + if [ -f "$dir/bin/$MVN_CMD" ]; then + actualDistributionDir="$(basename "$dir")" + break + fi + fi + done + set -f +fi + +if [ -z "$actualDistributionDir" ]; then + verbose "Contents of $TMP_DOWNLOAD_DIR:" + verbose "$(ls -la "$TMP_DOWNLOAD_DIR")" + die "Could not find Maven distribution directory in extracted archive" +fi + +verbose "Found extracted Maven distribution directory: $actualDistributionDir" +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..92450f9 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,189 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.4 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' + +$MAVEN_M2_PATH = "$HOME/.m2" +if ($env:MAVEN_USER_HOME) { + $MAVEN_M2_PATH = "$env:MAVEN_USER_HOME" +} + +if (-not (Test-Path -Path $MAVEN_M2_PATH)) { + New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null +} + +$MAVEN_WRAPPER_DISTS = $null +if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) { + $MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists" +} else { + $MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists" +} + +$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain" +$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +$actualDistributionDir = "" + +# First try the expected directory name (for regular distributions) +$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain" +$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD" +if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) { + $actualDistributionDir = $distributionUrlNameMain +} + +# If not found, search for any directory with the Maven executable (for snapshots) +if (!$actualDistributionDir) { + Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object { + $testPath = Join-Path $_.FullName "bin/$MVN_CMD" + if (Test-Path -Path $testPath -PathType Leaf) { + $actualDistributionDir = $_.Name + } + } +} + +if (!$actualDistributionDir) { + Write-Error "Could not find Maven distribution directory in extracted archive" +} + +Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir" +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/project_timeline.md b/project_timeline.md deleted file mode 100644 index 84f6e29..0000000 --- a/project_timeline.md +++ /dev/null @@ -1,212 +0,0 @@ -# Project Timeline - Real-Time Distributed Auction System (Updated) - -## Overview -- **Duration**: 6 Days (Starting Tomorrow) -- **Team Size**: 2 Members -- **Goal**: Complete remaining implementation, integration, and testing of RTDAS -- **Current Status**: ✅ Infrastructure Complete | ⚠️ Controllers Need Implementation - ---- - -## Current Project Status (As of Today) - -### ✅ Completed Components -| Component | Status | Notes | -|-----------|--------|-------| -| **Database** | ✅ Complete | SQLite schema, DatabaseManager, all Repositories working | -| **RMI Interface** | ✅ Complete | `IAuctionService` fully defined | -| **RMI Server** | ✅ Complete | `AuctionServiceImpl` implemented (some TODOs remain) | -| **Server Core** | ✅ Complete | `AuctionManager`, `LifecycleManager`, `ImageStore`, `UdpBroadcaster` | -| **Client Network** | ✅ Complete | `RmiClientProvider`, `UdpDiscoveryClient` | -| **Polling Service** | ⚠️ Partial | `PollingService` skeleton exists, needs implementation | -| **FXML Files** | ✅ Complete | All 6 views created (login, gallery, auction_detail, seller_dashboard, admin_panel, connect) | -| **CSS Styling** | ✅ Complete | All styles applied (IDE warnings are false positives) | -| **Shared Models** | ✅ Complete | User, AuctionItem, Bid, Seller, Bidder, Admin | -| **Exceptions** | ✅ Complete | All custom exceptions defined | - -### ⚠️ Remaining Implementation Work -| Component | Status | Effort Required | -|-----------|--------|-----------------| -| **LoginController** | 🔴 Empty | Connect RMI, handle login, navigate to appropriate dashboard | -| **GalleryController** | 🔴 Empty | Load auctions, display grid, fetch thumbnails, click-to-detail | -| **AuctionDetailController** | 🔴 Empty | Display auction info, place bids, show bid history, polling integration | -| **UserDashboardController** | 🔴 Empty | List seller's auctions, create auction form, cancel auctions, CSV export | -| **AdminPanelController** | 🔴 Empty | Create users, view all users, backup DB, view audit logs | -| **ConnectController** | 🔴 Empty | Server connection UI, UDP discovery or manual connect | -| **PollingService** | 🔴 Empty | Implement scheduled polling logic | -| **Export/Backup/Logs** | 🔴 TODO in Service | Implement CSV export, DB backup, audit log retrieval | - ---- - -## Revised Team Roles - Module-Based Ownership (2 Members) - -Each member owns **full-stack features** (backend logic + RMI exposure + GUI controller) for their assigned modules: - -### Member 1 (M1) - Authentication, Seller & Admin Module -**Owns**: Login flow, server connection, User Dashboard, admin panel, service utilities, documentation for auth/seller/admin -- **Backend**: User authentication, seller operations, admin operations, CSV export, backup, audit logs -- **RMI**: Auth methods, seller/admin service methods, utility methods -- **GUI**: `LoginController`, `ConnectController`, `UserDashboardController`, `AdminPanelController` -- **Integration**: Full login → dashboard flow, create auction flow, admin operations flow - -### Member 2 (M2) - Auction Bidding & Real-Time Module -**Owns**: Auction browsing, bidding system, real-time updates, polling service, deployment packaging -- **Backend**: Bid validation, gallery loading, auction detail retrieval, polling support -- **RMI**: Bidding methods, gallery/auction query methods, thread safety optimization -- **GUI**: `GalleryController`, `AuctionDetailController`, `PollingService` -- **Integration**: Full browse → bid → poll flow, real-time update flow - ---- - -## Day-by-Day Schedule (Revised for Remaining Work) - -### Day 1: Connection & Authentication Flow -**Theme**: Establish server connection and login system - -| Time | M1 (Auth, Seller, Admin Module) | M2 (Bidding, Gallery Module) | -|------|---------------------------------|------------------------------| -| Morning | - Implement `ConnectController`
- Add UDP discovery or manual connect
- Store server connection
- Complete `exportAuctionsToCSV()` in service
- Complete `backupDatabase()` in service
- Complete `getAuditLogs()` in service | - Implement `PollingService`
- Add scheduled executor logic
- Test with mock data | -| Afternoon | - Implement `LoginController`
- Call RMI login
- Navigate based on role
- Start `UserDashboardController` structure
- Load seller's auctions
- Display in table | - Start `GalleryController` structure
- Load active auctions from RMI
- Display auction cards | -| Evening Integration | **Joint Session (1.5 hours)**
- Test: Connect → Login → Dashboard navigation
- Verify role-based routing (Bidder/Seller/Admin)
- Test connection error handling | - -**Deliverables**: -- ✅ Server connection works (UDP or manual) -- ✅ Login authenticates via RMI -- ✅ Users routed to correct dashboard by role - ---- - -### Day 2: Auction Browsing & Gallery -**Theme**: View and explore active auctions - -| Time | M1 (Auth, Seller, Admin Module) | M2 (Bidding, Gallery Module) | -|------|---------------------------------|------------------------------| -| Morning | - Add session management
- Implement logout functionality
- Test re-authentication
- Implement create auction form in `UserDashboardController`
- Add image picker for 3 images
- Validate form inputs | - Complete `GalleryController`
- Fetch thumbnails via RMI
- Add click-to-detail navigation | -| Afternoon | - Wire up create auction to RMI
- Handle success/error feedback
- Test auction appears in gallery | - Implement image loading optimization
- Add lazy loading for gallery
- Test with many auctions | -| Evening Integration | **Joint Session (1.5 hours)**
- Test: Login → Browse Gallery → View Details
- Create auction → Appears in gallery
- Test thumbnail loading performance | - -**Deliverables**: -- ✅ Gallery displays all active auctions with thumbnails -- ✅ Clicking auction opens detail view -- ✅ Sellers can create new auctions - ---- - -### Day 3: Bidding System & Real-Time Updates -**Theme**: Place bids and see live updates - -| Time | M1 (Auth, Seller, Admin Module) | M2 (Bidding, Gallery Module) | -|------|---------------------------------|------------------------------| -| Morning | - Start `AdminPanelController`
- Create user form
- List all users table
- Add cancel auction feature
- Add CSV export button
- Test seller restrictions | - Complete `AuctionDetailController`
- Display auction info & current bid
- Implement bid placement UI | -| Afternoon | - Complete admin user creation
- Wire to RMI `createUser()`
- Test new user can login
- Start `AdminPanelController` backup/logs sections
- Wire backup button
- Display audit logs | - Integrate `PollingService` in detail view
- Update UI on poll callback (Platform.runLater)
- Show bid history | -| Evening Integration | **Joint Session (2 hours)**
- Test: Place bid → Poll updates UI
- Multiple clients bidding simultaneously
- Test stale data detection
- Admin creates user → User can login | - -**Deliverables**: -- ✅ Bids can be placed via detail view -- ✅ Polling updates price/bidder in real-time -- ✅ Admin can create users and view system data - ---- - -### Day 4: User Dashboard & Auction Management -**Theme**: Complete seller features and polish - -| Time | M1 (Auth, Seller, Admin Module) | M2 (Bidding, Gallery Module) | -|------|---------------------------------|------------------------------| -| Morning | - Add password change feature
- Implement user profile view
- Test security
- Complete seller's auction list with status
- Add relist ended auctions feature
- Test cancellation rules | - Add bid validation feedback
- Show error messages for invalid bids
- Add countdown timer display | -| Afternoon | - Polish login error messages
- Add "remember me" option
- Test edge cases
- Polish admin panel layout
- Add confirmation dialogs
- Test all admin operations | - Optimize polling interval
- Add pause/resume on view switch
- Memory leak check | -| Evening Integration | **Joint Session (2 hours)**
- Full seller flow: Create → Monitor → Cancel/Export
- Full admin flow: Create user → View logs → Backup
- Test concurrent sellers | - -**Deliverables**: -- ✅ Sellers can manage all their auctions -- ✅ Admin panel fully functional -- ✅ All error states handled gracefully - ---- - -### Day 5: Comprehensive Testing & Bug Fixes -**Theme**: Find and fix all issues - -| Time | M1 (Auth, Seller, Admin Module) | M2 (Bidding, Gallery Module) | -|------|---------------------------------|------------------------------| -| Morning | - Test auth edge cases
- Concurrent logins
- Session timeout
- Test all seller operations
- Large image uploads
- CSV export verification | - Stress test bidding
- 10+ concurrent bidders
- Network disconnection scenarios | -| Afternoon | - Fix discovered bugs
- Performance profiling
- Memory optimization | - Fix race conditions
- Optimize RMI calls
- Reduce polling overhead | -| Evening Integration | **Joint Session (2.5 hours)**
- Full regression test suite
- Document all remaining issues
- Prioritize fixes for Day 6 | - -**Deliverables**: -- ✅ All critical bugs fixed -- ✅ Performance acceptable (<2s response time) -- ✅ No memory leaks detected - ---- - -### Day 6: Final Polish & Deployment Preparation -**Theme**: Production readiness - -| Time | M1 (Auth, Seller, Admin Module) | M2 (Bidding, Gallery Module) | -|------|---------------------------------|------------------------------| -| Morning | - Write user authentication guide
- Record login flow demo
- Final security review
- Write seller/admin guide
- Record management demo
- Final UI polish | - Write bidding system documentation
- Record bidding demo
- Final performance check | -| Afternoon | - Build production JAR
- Test standalone server
- Test multi-client scenario
- Create deployment checklist
- Document ports/firewall rules
- Troubleshooting guide | - Package all resources
- Verify all images/assets
- Create quick-start guide | -| Evening Integration | **Final Demo & Presentation (2.5 hours)**
- Complete end-to-end demonstration
- Record final demo video
- Prepare presentation slides
- Celebrate! 🎉 | - -**Deliverables**: -- ✅ Production-ready fat JAR -- ✅ Complete documentation set -- ✅ Demo video recorded -- ✅ Both team members can present any feature - ---- - -## Integration Points Schedule - -| Day | Time | Duration | Focus Area | -|-----|------|----------|------------| -| Day 1 | Evening | 1.5 hours | Connect → Login → Dashboard | -| Day 2 | Evening | 1.5 hours | Gallery → Auction Detail → Create | -| Day 3 | Evening | 2 hours | Bidding → Polling → Admin Users | -| Day 4 | Evening | 2 hours | Seller Management → Admin Operations | -| Day 5 | Evening | 2.5 hours | Full Regression Testing | -| Day 6 | Evening | 2.5 hours | Final Demo & Deployment | - ---- - -## Risk Mitigation - -### Potential Risks -1. **RMI Connection Issues** - M2 leads troubleshooting, M1 assists -2. **UI Freezing on Network Calls** - M2 ensures background threading in controllers -3. **Integration Conflicts** - Daily evening sync prevents accumulation -4. **Polling Performance** - M2 optimizes interval, implements pause/resume -5. **Workload Imbalance** - M1 has broader scope (Auth+Seller+Admin); M2 has deeper technical complexity (Real-time). Both should communicate if one falls behind. -6. **Interface Changes** - Any `IAuctionService` changes require both members to coordinate immediately - -### Contingency Plan -- If a task falls behind: Reallocate from next day's buffer time -- If integration fails: Roll back to morning's stable version -- If one member unavailable: Other member covers critical path tasks (both should understand full system) -- Day 5 afternoon reserved for overflow bug fixes -- If M1 falls behind on User Dashboard: M2 can assist since gallery already displays auctions -- If M2 falls behind on Polling: M1 can implement basic UI updates while M2 optimizes - ---- - -## Success Criteria - -- [ ] All 6 days completed with daily integrations -- [ ] Zero merge conflicts in final build -- [ ] All controllers implemented and wired to RMI -- [ ] Polling service updates UI in real-time -- [ ] Server handles 10+ concurrent clients -- [ ] Complete documentation delivered -- [ ] Successful demo recording - ---- - -## Notes -- **Daily Standup**: 15 minutes each morning (virtual or in-person) -- **Code Reviews**: Pair review before each integration session -- **Git Strategy**: Feature branches → Daily merge to `develop` → Final merge to `main` -- **Communication**: Use group chat for quick questions, save detailed discussions for integration sessions -- **Module Ownership**: Each member fully owns their module (backend + RMI + GUI) -- **2-Member Workflow**: M1 handles Auth+Seller+Admin, M2 handles Bidding+Gallery+Real-time; both collaborate on integration -- **Shared Interface**: Any changes to `IAuctionService.java` must be discussed and agreed upon by both members before implementation diff --git a/seed-demo-data.bat b/seed-demo-data.bat index 3d8fde2..7adbd97 100644 --- a/seed-demo-data.bat +++ b/seed-demo-data.bat @@ -1,51 +1,4 @@ @echo off -REM seed-demo-data.bat -REM Convenience script to seed the database and generate test images -REM Usage: seed-demo-data.bat - -setlocal enabledelayedexpansion - -echo. -echo 🌱 RTDAS Demo Data Seeding -echo ========================== -echo. - -REM Check if Maven is available -where mvn >nul 2>nul -if errorlevel 1 ( - echo ❌ Maven not found. Please ensure Maven is in your PATH. - exit /b 1 -) - -echo 1️⃣ Running DemoSeeder... -call mvn exec:java -Dexec.mainClass=com.auction.server.tools.DemoSeeder -if errorlevel 1 ( - echo ❌ DemoSeeder failed - exit /b 1 -) - -echo. -echo 2️⃣ Generating Test Images... -call mvn exec:java -Dexec.mainClass=com.auction.server.tools.SeedTestImages -if errorlevel 1 ( - echo ❌ Image generation failed - exit /b 1 -) - -echo. -echo ✅ Demo data setup complete! -echo. -echo 📋 Next steps: -echo 1. Start server: mvn exec:java -echo 2. Open client UI -echo 3. Login as bella-247 / pass123 -echo. -echo 🔓 Test accounts: -echo - bella-247 (bidder) / pass123 -echo - seller-alice / pass123 -echo - seller-bob / pass123 -echo - seller-charlie / pass123 -echo. -echo 📖 See TESTING_GUIDE.md for detailed test scenarios -echo. -pause +set CP=target\classes +for /f "delims=" %%a in (cp.txt) do set CP=%CP%;%%a +java -cp "%CP%" com.auction.server.tools.DatabaseResetUtil diff --git a/src/main/java/com/auction/client/controllers/AdminPanelController.java b/src/main/java/com/auction/client/controllers/AdminPanelController.java new file mode 100644 index 0000000..6113a33 --- /dev/null +++ b/src/main/java/com/auction/client/controllers/AdminPanelController.java @@ -0,0 +1,474 @@ +package com.auction.client.controllers; + +import atlantafx.base.theme.Styles; +import com.auction.client.core.ClientContext; +import com.auction.client.service.ThumbnailExecutor; +import com.auction.client.state.AuctionUiState; +import com.auction.client.util.Toast; +import com.auction.shared.Constants; +import com.auction.shared.exceptions.AuctionException; +import com.auction.shared.interfaces.IAuctionService; +import com.auction.shared.models.AuctionItem; +import com.auction.shared.models.User; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; +import javafx.application.Platform; +import javafx.beans.property.ReadOnlyObjectWrapper; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.Node; +import javafx.scene.control.Alert; +import javafx.scene.control.ButtonBar; +import javafx.scene.control.ButtonType; +import javafx.scene.control.Label; +import javafx.scene.control.MenuButton; +import javafx.scene.control.MenuItem; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableRow; +import javafx.scene.control.TableView; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.MouseButton; +import javafx.scene.layout.VBox; + +public class AdminPanelController { + + @FXML + private VBox contentArea; + + @FXML + public void initialize() { + showUsers(); + } + + @FXML + private void showUsers() { + try { + IAuctionService service = getService(); + List users = service.getAllUsers( + ClientContext.getInstance().getSessionToken() + ); + contentArea + .getChildren() + .setAll( + buildHeader("Users", "All registered users in the system."), + buildUsersTable(users) + ); + } catch (Exception e) { + showError("Failed to load users", e); + } + } + + @FXML + private void showAuctions() { + try { + IAuctionService service = getService(); + List auctions = service.getActiveAuctions(); + + // Sync server-provided auctions into the shared client UI state + ObservableList shared = + AuctionUiState.getInstance().getActiveAuctions(); + shared.setAll(auctions); + + contentArea + .getChildren() + .setAll( + buildHeader( + "Auctions", + "Active auctions visible to the admin account." + ), + buildAuctionsTable(shared) + ); + } catch (Exception e) { + showError("Failed to load auctions", e); + } + } + + @FXML + private void showLogs() { + try { + IAuctionService service = getService(); + List logs = service.getAuditLogs( + 200, + ClientContext.getInstance().getSessionToken() + ); + VBox logsBox = new VBox(8); + logsBox.getStyleClass().add("panel-card"); + logsBox + .getChildren() + .add( + buildHeader( + "Audit Logs", + "Most recent administrative and system events." + ) + ); + + if (logs.isEmpty()) { + logsBox.getChildren().add(new Label("No audit logs available.")); + } else { + for (String line : logs) { + Label entry = new Label(line); + entry.setWrapText(true); + entry.getStyleClass().add("section-copy"); + logsBox.getChildren().add(entry); + } + } + + contentArea.getChildren().setAll(logsBox); + } catch (AuctionException e) { + showError("Failed to load logs", e); + } catch (Exception e) { + showError("Failed to load logs", e); + } + } + + @FXML + private void handleRefresh() { + showUsers(); + } + + @FXML + private void handleRefreshDashboard() { + showUsers(); + } + + @FXML + private void handleLogout() { + try { + ClientContext ctx = ClientContext.getInstance(); + ctx.getRmiProvider().getService().logout(ctx.getSessionToken()); + ctx.clearSession(); + ctx.getViewLoader().loadView("login.fxml"); + } catch (Exception e) { + showError("Logout failed", e); + } + } + + private IAuctionService getService() throws Exception { + return ClientContext.getInstance().getRmiProvider().getService(); + } + + private Node buildHeader(String title, String subtitle) { + VBox header = new VBox(4); + header.getStyleClass().add("panel-card"); + + Label titleLabel = new Label(title); + titleLabel.getStyleClass().add("section-title"); + + Label subtitleLabel = new Label(subtitle); + subtitleLabel.getStyleClass().add("section-copy"); + subtitleLabel.setWrapText(true); + + header.getChildren().addAll(titleLabel, subtitleLabel); + return header; + } + + private TableView buildUsersTable(List users) { + TableView table = new TableView<>(); + table.getStyleClass().add("data-table"); + + TableColumn usernameCol = new TableColumn<>("Username"); + usernameCol.setCellValueFactory(new PropertyValueFactory<>("username")); + usernameCol.setPrefWidth(180); + + TableColumn roleCol = new TableColumn<>("Role"); + roleCol.setCellValueFactory(new PropertyValueFactory<>("roleType")); + roleCol.setPrefWidth(100); + + TableColumn createdCol = new TableColumn<>("Created At"); + createdCol.setCellValueFactory(new PropertyValueFactory<>("createdAt")); + createdCol.setPrefWidth(220); + + table.getColumns().addAll(usernameCol, roleCol, createdCol); + table.getItems().setAll(users); + return table; + } + + private TableView buildAuctionsTable( + ObservableList auctions + ) { + TableView table = new TableView<>(); + table.getStyleClass().add("auction-table"); + + // double-click to open detail + table.setRowFactory(tv -> { + TableRow row = new TableRow<>(); + row.setOnMouseClicked(event -> { + if ( + event.getButton() == MouseButton.PRIMARY && + event.getClickCount() == 2 && + !row.isEmpty() + ) { + openAuctionDetail(row.getItem()); + } + }); + return row; + }); + + TableColumn idCol = new TableColumn<>("ID"); + idCol.setCellValueFactory(new PropertyValueFactory<>("id")); + idCol.setPrefWidth(70); + + TableColumn titleCol = new TableColumn<>("Title"); + titleCol.setCellValueFactory(new PropertyValueFactory<>("title")); + titleCol.setPrefWidth(200); + + TableColumn sellerCol = new TableColumn<>("Seller"); + sellerCol.setCellValueFactory(new PropertyValueFactory<>("sellerUsername")); + sellerCol.setPrefWidth(140); + + TableColumn statusCol = new TableColumn<>("Status"); + statusCol.setCellValueFactory(new PropertyValueFactory<>("status")); + statusCol.setPrefWidth(100); + + TableColumn bidCol = new TableColumn<>("Current Bid"); + bidCol.setCellValueFactory(new PropertyValueFactory<>("currentBidCents")); + bidCol.setPrefWidth(130); + bidCol.setCellFactory(col -> + new javafx.scene.control.TableCell<>() { + @Override + protected void updateItem(Long value, boolean empty) { + super.updateItem(value, empty); + setText(empty || value == null ? null : Constants.formatCents(value)); + } + } + ); + + // thumbnail column + TableColumn thumbCol = new TableColumn<>(""); + thumbCol.setCellValueFactory(param -> + new ReadOnlyObjectWrapper<>(param.getValue()) + ); + thumbCol.setPrefWidth(64); + thumbCol.setCellFactory(col -> + new TableCell<>() { + private final ImageView imageView = new ImageView(); + + { + imageView.setFitWidth(54); + imageView.setFitHeight(54); + imageView.setPreserveRatio(true); + imageView.getStyleClass().add("image-thumb"); + } + + @Override + protected void updateItem(AuctionItem item, boolean empty) { + super.updateItem(item, empty); + if (empty || item == null) { + setGraphic(null); + return; + } + loadThumbnailAsync(item.getId(), 0, imageView); + setGraphic(imageView); + } + } + ); + + // actions column + TableColumn actions = new TableColumn<>( + "Actions" + ); + actions.setCellValueFactory(param -> + new ReadOnlyObjectWrapper<>(param.getValue()) + ); + actions.setPrefWidth(140); + actions.setCellFactory(col -> + new TableCell<>() { + private final MenuButton menuButton = new MenuButton("Actions"); + + { + menuButton.getStyleClass().add(Styles.FLAT); + menuButton.setMaxWidth(Double.MAX_VALUE); + } + + @Override + protected void updateItem(AuctionItem item, boolean empty) { + super.updateItem(item, empty); + if (empty || item == null) { + setGraphic(null); + return; + } + menuButton.getItems().setAll(buildActionMenu(item)); + setGraphic(menuButton); + } + } + ); + + table + .getColumns() + .addAll(thumbCol, idCol, titleCol, sellerCol, statusCol, bidCol, actions); + table.setItems(auctions); + return table; + } + + // --- Helpers for thumbnails and actions --- + + private final Map thumbnailCache = new ConcurrentHashMap<>(); + private static final Image PLACEHOLDER = loadPlaceholder(); + + private static Image loadPlaceholder() { + try ( + var stream = AdminPanelController.class.getResourceAsStream( + "/images/placeholder.png" + ) + ) { + return stream == null ? null : new Image(stream); + } catch (IOException e) { + return null; + } + } + + private void loadThumbnailAsync(int auctionId, int index, ImageView target) { + String key = auctionId + ":" + index; + Image cached = thumbnailCache.get(key); + if (cached != null) { + target.setImage(cached); + return; + } + + CompletableFuture.supplyAsync( + () -> { + try { + byte[] bytes = ClientContext.getInstance() + .getRmiProvider() + .getService() + .getThumbnail(auctionId, index); + return bytes == null || bytes.length == 0 + ? null + : new Image(new ByteArrayInputStream(bytes)); + } catch (Exception e) { + return null; + } + }, + ThumbnailExecutor.getExecutor() + ).thenAccept(image -> { + Image finalImage = image == null ? PLACEHOLDER : image; + thumbnailCache.put(key, finalImage); + Platform.runLater(() -> target.setImage(finalImage)); + }); + } + + private java.util.List buildActionMenu(AuctionItem item) { + MenuItem viewDetails = new MenuItem("View Details"); + viewDetails.setOnAction(e -> openAuctionDetail(item)); + + if (ownsListing(item) && isActive(item)) { + MenuItem cancelListing = new MenuItem("Cancel Listing"); + cancelListing.setOnAction(e -> + performAuctionAction(item, this::cancelAuction) + ); + return List.of(viewDetails, cancelListing); + } + + if (ownsListing(item) && isRelistable(item)) { + MenuItem relist = new MenuItem("Relist"); + relist.setOnAction(e -> performAuctionAction(item, this::relistAuction)); + return List.of(viewDetails, relist); + } + + return List.of(viewDetails); + } + + private boolean ownsListing(AuctionItem item) { + String username = ClientContext.getInstance().getUsername(); + return ( + item != null && + username != null && + username.equals(item.getSellerUsername()) + ); + } + + private boolean isActive(AuctionItem item) { + return ( + item != null && + item.getStatus() != null && + Constants.STATUS_ACTIVE.equalsIgnoreCase(item.getStatus()) + ); + } + + private boolean isRelistable(AuctionItem item) { + if (item == null || item.getStatus() == null) return false; + String status = item.getStatus().trim().toUpperCase(Locale.ROOT); + return ( + status.equals(Constants.STATUS_EXPIRED) || + status.equals(Constants.STATUS_CANCELLED) || + status.equals("ENDED") + ); + } + + private void performAuctionAction(AuctionItem item, AuctionAction action) { + if (item == null) return; + Alert alert = new Alert(Alert.AlertType.CONFIRMATION); + alert.setTitle("Confirm Action"); + alert.setHeaderText(item.getTitle()); + alert.setContentText("Proceed with this auction action?"); + ButtonType yesButton = new ButtonType("Proceed", ButtonBar.ButtonData.YES); + ButtonType noButton = new ButtonType("Cancel", ButtonBar.ButtonData.NO); + alert.getButtonTypes().setAll(yesButton, noButton); + Optional result = alert.showAndWait(); + if (result.isPresent() && result.get() == yesButton) { + try { + action.execute(item); + showAuctions(); + } catch (Exception e) { + showError("Action failed: " + e.getMessage()); + } + } + } + + private void cancelAuction(AuctionItem item) throws Exception { + ClientContext ctx = ClientContext.getInstance(); + ctx + .getRmiProvider() + .getService() + .cancelAuction(item.getId(), ctx.getSessionToken()); + } + + private void relistAuction(AuctionItem item) throws Exception { + ClientContext ctx = ClientContext.getInstance(); + java.time.Instant newEnd = java.time.Instant.now().plus( + java.time.Duration.ofDays(1) + ); + ctx + .getRmiProvider() + .getService() + .relistAuction(item.getId(), newEnd.toString(), ctx.getSessionToken()); + } + + private void openAuctionDetail(AuctionItem item) { + if (item == null) return; + try { + ClientContext ctx = ClientContext.getInstance(); + ctx.setPreviousViewName("admin_panel.fxml"); + ctx.setCurrentAuctionId(item.getId()); + AuctionDetailController controller = ctx + .getViewLoader() + .loadView("auction_detail.fxml"); + controller.setAuction(item); + } catch (Exception e) { + showError("Open detail failed", e); + } + } + + private interface AuctionAction { + void execute(AuctionItem item) throws Exception; + } + + private void showError(String message, Exception error) { + if (contentArea != null) { + contentArea.getChildren().setAll(buildHeader("Admin Panel", message)); + } + Toast.show(contentArea, message, Toast.Type.ERROR); + if (error != null) { + System.err.println(message + ": " + error.getMessage()); + } + } +} diff --git a/src/main/java/com/auction/client/controllers/AuctionDetailController.java b/src/main/java/com/auction/client/controllers/AuctionDetailController.java index af99aec..284b4c7 100644 --- a/src/main/java/com/auction/client/controllers/AuctionDetailController.java +++ b/src/main/java/com/auction/client/controllers/AuctionDetailController.java @@ -1,33 +1,74 @@ package com.auction.client.controllers; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.text.NumberFormat; +import java.util.Locale; +import java.util.concurrent.CompletableFuture; + import com.auction.client.core.ClientContext; import com.auction.client.service.PollingService; import com.auction.client.service.ThumbnailExecutor; import com.auction.shared.Constants; +import com.auction.shared.exceptions.AuctionClosedException; import com.auction.shared.exceptions.AuctionException; +import com.auction.shared.exceptions.InsufficientBidException; +import com.auction.shared.exceptions.SelfBidException; import com.auction.shared.models.AuctionItem; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.time.Instant; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; + +import atlantafx.base.theme.Styles; import javafx.animation.PauseTransition; -import javafx.animation.ScaleTransition; -import javafx.animation.TranslateTransition; import javafx.application.Platform; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; import javafx.fxml.FXML; -import javafx.scene.control.*; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.ListCell; +import javafx.scene.control.ListView; +import javafx.scene.control.TextField; +import javafx.scene.control.TextFormatter; import javafx.scene.image.Image; import javafx.scene.image.ImageView; -import javafx.stage.Popup; import javafx.util.Duration; public class AuctionDetailController { + private static final NumberFormat CURRENCY = NumberFormat.getCurrencyInstance( + Locale.US + ); + + static { + CURRENCY.setCurrency(java.util.Currency.getInstance("ETB")); + } + + @FXML + private Label titleLabel; + @FXML - private Label auctionTitleLabel, auctionDescriptionLabel, currentBidLabel, timeLeftLabel, highestBidderLabel, bidStatusLabel; + private Label descriptionLabel; + + @FXML + private Label statusLabel; + + @FXML + private Label sellerLabel; + + @FXML + private Label currentHighestBidLabel; + + @FXML + private Label minimumBidLabel; + + @FXML + private Label highestBidderLabel; + + @FXML + private Label bidStatusLabel; + + @FXML + private Label timeLeftLabel; @FXML private Button placeBidButton; @@ -36,245 +77,445 @@ public class AuctionDetailController { private TextField bidAmountField; @FXML - private ProgressIndicator bidSpinner; + private ImageView heroImageView; @FXML - private ImageView heroImageView, thumb1View, thumb2View, thumb3View; + private ListView thumbnailListView; + private final ObservableList thumbnails = + FXCollections.observableArrayList(); private PollingService pollingService; - private int auctionId = -1; - private AuctionItem currentItem; - private final Executor executor = Executors.newCachedThreadPool(); + private AuctionItem currentAuction; private static final Image PLACEHOLDER = loadPlaceholder(); - public void loadAuction(int id) { - this.auctionId = id; - try { - var service = ClientContext.getInstance().getRmiProvider().getService(); - this.pollingService = new PollingService(); - this.currentItem = service.getAuctionById(id); - - Platform.runLater(() -> updateUi(currentItem)); - loadDetailThumbnail(id, 0, heroImageView); - loadDetailThumbnail(id, 1, thumb1View); - loadDetailThumbnail(id, 2, thumb2View); - loadDetailThumbnail(id, 3, thumb3View); - - pollingService.startPolling( - () -> { - try { - AuctionItem fresh = service.getAuctionById(id); - if ( - fresh != null && - currentItem != null && - !fresh.getEndTime().equals(currentItem.getEndTime()) - ) { - Platform.runLater(() -> showToast("Timer Extended!")); - } - this.currentItem = fresh; - Platform.runLater(() -> updateUi(fresh)); - } catch (Exception ignored) {} - }, - 2 - ); - } catch (Exception e) { - e.printStackTrace(); + @FXML + public void initialize() { + if (titleLabel != null) { + titleLabel.getStyleClass().add(Styles.TITLE_1); + } + if (placeBidButton != null) { + placeBidButton.getStyleClass().add(Styles.ACCENT); } - } - private void updateUi(AuctionItem item) { - if (item == null) return; - auctionTitleLabel.setText( - item.getTitle() == null ? "Auction Detail" : item.getTitle() - ); - auctionDescriptionLabel.setText( - item.getDescription() == null - ? "No description provided" - : item.getDescription() + bidAmountField.setTextFormatter( + new TextFormatter<>(change -> + change.getControlNewText().matches("\\d*(?:\\.\\d{0,2})?") + ? change + : null + ) ); - currentBidLabel.setText(Constants.formatCents(item.getCurrentBidCents())); - highestBidderLabel.setText( - item.getHighestBidderUsername() == null - ? "N/A" - : item.getHighestBidderUsername() + + thumbnailListView.getStyleClass().add("thumbnail-list"); + + thumbnailListView.setItems(thumbnails); + thumbnailListView.setCellFactory(list -> + new ListCell<>() { + private final ImageView imageView = new ImageView(); + + { + imageView.setFitWidth(88); + imageView.setFitHeight(64); + imageView.setPreserveRatio(true); + imageView.getStyleClass().add("image-thumb"); + } + + @Override + protected void updateItem(Image item, boolean empty) { + super.updateItem(item, empty); + if (empty || item == null) { + setGraphic(null); + return; + } + imageView.setImage(item); + setGraphic(imageView); + } + } ); - timeLeftLabel.setText(formatTime(item.getEndTime())); + + thumbnailListView + .getSelectionModel() + .selectedIndexProperty() + .addListener((obs, oldValue, newValue) -> { + if ( + newValue == null || + newValue.intValue() < 0 || + newValue.intValue() >= thumbnails.size() + ) { + return; + } + heroImageView.setImage(thumbnails.get(newValue.intValue())); + }); + + bidStatusLabel.setText("Ready to bid."); + setBidControlsEnabled(false); } - private String formatTime(String iso) { - try { - var d = java.time.Duration.between(Instant.now(), Instant.parse(iso)); - if (d.isNegative() || d.isZero()) return "Ended"; - return String.format("%02dh %02dm", d.toHours(), d.toMinutesPart()); - } catch (Exception e) { - return "--:--"; + public void setAuction(AuctionItem auction) { + if (auction == null) { + return; } + shutdownPolling(); + currentAuction = auction; + + // Check if current user is the seller + String currentUser = ClientContext.getInstance().getUsername(); + if ( + currentUser != null && currentUser.equals(auction.getSellerUsername()) + ) { + // Redirect seller to auction management view + redirectSellerToManagement(auction); + return; + } + + applyAuction(auction); + loadThumbnails(auction.getId()); + startPolling(auction.getId()); } @FXML private void handlePlaceBid() { + if (currentAuction == null) { + bidStatusLabel.setText("No auction is selected."); + return; + } + try { double amount = Double.parseDouble(bidAmountField.getText().trim()); - long cents = Math.round(amount * 100); - long expected = currentItem.getCurrentBidCents(); + long bidCents = Math.round(amount * 100.0); + long minimumCents = minimumAcceptedBid(currentAuction); + + if (bidCents < minimumCents) { + bidStatusLabel.setText( + "Bid must be at least " + formatCurrency(minimumCents) + "." + ); + shakeBidField(); + return; + } + + setBidControlsEnabled(true); + bidStatusLabel.setText("Submitting bid..."); - setBidState(true); CompletableFuture.runAsync( () -> { try { - var ctx = ClientContext.getInstance(); + ClientContext ctx = ClientContext.getInstance(); ctx .getRmiProvider() .getService() - .placeBid(auctionId, cents, expected, ctx.getSessionToken()); + .placeBid( + currentAuction.getId(), + bidCents, + currentAuction.getCurrentBidCents(), + ctx.getSessionToken() + ); Platform.runLater(() -> { - bidStatusLabel.setText("Bid submitted"); bidAmountField.clear(); - animateHero(1.06, 300, 2); - showToast("Bid placed"); + bidStatusLabel.setText("Bid submitted successfully."); + refreshAuction(); }); } catch (Exception e) { - String msg = (e.getCause() instanceof AuctionException) - ? e.getCause().getMessage() - : "Failed to place bid"; Platform.runLater(() -> { - bidStatusLabel.setText(msg); - animateShake(); + bidStatusLabel.setText(resolveBidMessage(e)); + shakeBidField(); }); } finally { - Platform.runLater(() -> setBidState(false)); + Platform.runLater(() -> setBidControlsEnabled(false)); } }, - executor + ThumbnailExecutor.getExecutor() ); } catch (Exception e) { - bidStatusLabel.setText("Invalid amount"); + bidStatusLabel.setText("Enter a numeric bid amount."); + shakeBidField(); } } - private void setBidState(boolean working) { - placeBidButton.setDisable(working); - bidAmountField.setDisable(working); - bidSpinner.setVisible(working); - } - - private void animateShake() { - TranslateTransition tt = new TranslateTransition( - Duration.millis(50), - bidAmountField - ); - tt.setByX(10f); - tt.setCycleCount(6); - tt.setAutoReverse(true); - tt.play(); - } - - private void animateHero(double scale, int ms, int cycles) { - ScaleTransition st = new ScaleTransition( - Duration.millis(ms), - heroImageView - ); - st.setToX(scale); - st.setToY(scale); - st.setAutoReverse(true); - st.setCycleCount(cycles); - st.play(); + @FXML + private void handleBackToPreviousView() { + shutdownPolling(); + try { + ClientContext ctx = ClientContext.getInstance(); + String previous = ctx.getPreviousViewName(); + ctx + .getViewLoader() + .loadView(previous == null ? "user_dashboard.fxml" : previous); + } catch (Exception e) { + bidStatusLabel.setText("Navigation failed: " + e.getMessage()); + } } - private void showToast(String msg) { - Label lbl = new Label(msg); - lbl.setStyle( - "-fx-background-color: #28a043; -fx-text-fill: white; -fx-padding: 8px; -fx-background-radius: 5px;" - ); - Popup p = new Popup(); - p.getContent().add(lbl); - p.show(heroImageView.getScene().getWindow()); - PauseTransition pt = new PauseTransition(Duration.seconds(1.5)); - pt.setOnFinished(e -> p.hide()); - pt.play(); + public void shutdown() { + shutdownPolling(); } - private void loadDetailThumbnail(int id, int idx, ImageView view) { - CompletableFuture.supplyAsync( + private void startPolling(int auctionId) { + pollingService = new PollingService(); + pollingService.startPolling( () -> { try { - byte[] bytes = ClientContext.getInstance() + AuctionItem fresh = ClientContext.getInstance() .getRmiProvider() .getService() - .getThumbnail(id, idx); - return (bytes == null || bytes.length == 0) - ? null - : new Image(new ByteArrayInputStream(bytes)); - } catch (Exception e) { - return null; - } + .getAuctionById(auctionId); + if (fresh != null) { + Platform.runLater(() -> { + currentAuction = fresh; + applyAuction(fresh); + }); + } + } catch (Exception ignored) {} }, - ThumbnailExecutor.getExecutor() - ).thenAccept(img -> - Platform.runLater(() -> view.setImage(img != null ? img : PLACEHOLDER)) + 1 // Update every second for timer ); } - @FXML - private void handleThumb1Click() { - updateHero(thumb1View.getImage()); + private void refreshAuction() { + if (currentAuction == null) { + return; + } + try { + AuctionItem fresh = ClientContext.getInstance() + .getRmiProvider() + .getService() + .getAuctionById(currentAuction.getId()); + if (fresh != null) { + currentAuction = fresh; + applyAuction(fresh); + } + } catch (Exception e) { + bidStatusLabel.setText("Refresh failed: " + e.getMessage()); + } } - @FXML - private void handleThumb2Click() { - updateHero(thumb2View.getImage()); + private void redirectSellerToManagement(AuctionItem auction) { + try { + // Redirect to user dashboard where the seller can manage their auction + ClientContext ctx = ClientContext.getInstance(); + ctx.setPreviousViewName("user_dashboard.fxml"); + ctx.setCurrentAuctionId(auction.getId()); + + // Show a message in the dashboard + UserDashboardController dashboardController = + (UserDashboardController) ctx + .getViewLoader() + .loadView("user_dashboard.fxml"); + + // You might want to add a specific message or highlight + // For now, we'll just redirect to the dashboard + + // Set a status message about the seller redirection + if (dashboardController != null) { + // This could be enhanced to show a specific message + // dashboardController.showSellerManagementMessage(auction); + } + } catch (Exception e) { + // Fallback to showing an error message if navigation fails + if (bidStatusLabel != null) { + bidStatusLabel.setText("Error: Unable to load management view."); + } + } } - @FXML - private void handleThumb3Click() { - updateHero(thumb3View.getImage()); + private void applyAuction(AuctionItem auction) { + if (auction == null) { + return; + } + + titleLabel.setText( + auction.getTitle() == null ? "Auction Detail" : auction.getTitle() + ); + descriptionLabel.setText( + auction.getDescription() == null + ? "No description provided." + : auction.getDescription() + ); + sellerLabel.setText( + auction.getSellerUsername() == null + ? "Seller: unknown" + : "Seller: " + auction.getSellerUsername() + ); + statusLabel.setText( + auction.getStatus() == null ? "STATUS" : auction.getStatus() + ); + statusLabel + .getStyleClass() + .setAll("status-chip", statusStyle(auction.getStatus())); + + currentHighestBidLabel.setText( + formatCurrency(auction.getCurrentBidCents()) + ); + highestBidderLabel.setText( + auction.getHighestBidderUsername() == null + ? "Highest bidder: No bids yet" + : "Highest bidder: " + auction.getHighestBidderUsername() + ); + minimumBidLabel.setText( + "Minimum next bid: " + formatCurrency(minimumAcceptedBid(auction)) + ); + timeLeftLabel.setText(formatTimeLeft(auction.getEndTime())); + + boolean active = + auction.getStatus() != null && + Constants.STATUS_ACTIVE.equalsIgnoreCase(auction.getStatus()); + setBidControlsEnabled(!active); + bidAmountField.setDisable(!active); + placeBidButton.setDisable(!active); } - private void updateHero(Image img) { - if (img != null) heroImageView.setImage(img); + private void loadThumbnails(int auctionId) { + thumbnails.clear(); + heroImageView.setImage(PLACEHOLDER); + + for (int index = 0; index < 3; index++) { + final int thumbnailIndex = index; + CompletableFuture.supplyAsync( + () -> { + try { + byte[] bytes = ClientContext.getInstance() + .getRmiProvider() + .getService() + .getThumbnail(auctionId, thumbnailIndex); + return bytes == null || bytes.length == 0 + ? PLACEHOLDER + : new Image(new ByteArrayInputStream(bytes)); + } catch (Exception e) { + return PLACEHOLDER; + } + }, + ThumbnailExecutor.getExecutor() + ).thenAccept(image -> + Platform.runLater(() -> { + thumbnails.add(image == null ? PLACEHOLDER : image); + if (thumbnails.size() == 1) { + thumbnailListView.getSelectionModel().selectFirst(); + heroImageView.setImage(thumbnails.get(0)); + } + }) + ); + } } - public void showHeroImageIndex(int index) { - switch (index) { - case 1: - updateHero(thumb1View.getImage()); - break; - case 2: - updateHero(thumb2View.getImage()); - break; - case 3: - updateHero(thumb3View.getImage()); - break; - default: - break; + private void setBidControlsEnabled(boolean working) { + if (placeBidButton != null) { + placeBidButton.setDisable( + working || currentAuction == null || !isActive(currentAuction) + ); + } + if (bidAmountField != null) { + bidAmountField.setDisable( + working || currentAuction == null || !isActive(currentAuction) + ); } } - @FXML - private void handleBackToGallery() { - if (pollingService != null) pollingService.shutdown(); + private boolean isActive(AuctionItem item) { + return ( + item != null && + item.getStatus() != null && + Constants.STATUS_ACTIVE.equalsIgnoreCase(item.getStatus()) + ); + } + + private long minimumAcceptedBid(AuctionItem auction) { + if (auction.getHighestBidderUsername() == null) { + return auction.getStartingPriceCents(); + } + long current = auction.getCurrentBidCents(); + long increment = Math.max(1L, (current + 19) / 20); + return current + increment; + } + + private String formatCurrency(long cents) { + return CURRENCY.format(cents / 100.0); + } + + private String formatTimeLeft(String iso) { try { - ClientContext ctx = ClientContext.getInstance(); - ctx - .getViewLoader() - .loadView( - ctx.getPreviousViewName() == null - ? "gallery.fxml" - : ctx.getPreviousViewName() - ); - } catch (IOException e) { - e.printStackTrace(); + java.time.Instant endTime = java.time.Instant.parse(iso); + java.time.Duration duration = java.time.Duration.between( + java.time.Instant.now(), + endTime + ); + + if (duration.isNegative() || duration.isZero()) { + return "Ended"; + } + + long days = duration.toDays(); + long hours = duration.toHoursPart(); + long minutes = duration.toMinutesPart(); + long seconds = duration.toSecondsPart(); + + if (days > 0) { + return String.format("%dd %02dh %02dm", days, hours, minutes); + } else if (hours > 0) { + return String.format("%02dh %02dm %02ds", hours, minutes, seconds); + } else if (minutes > 0) { + return String.format("%02dm %02ds", minutes, seconds); + } else { + return String.format("%02ds", seconds); + } + } catch (Exception e) { + return "--:--:--"; } } - public void shutdown() { - if (pollingService != null) pollingService.shutdown(); + private String resolveBidMessage(Throwable throwable) { + Throwable current = throwable; + while (current != null) { + if (current instanceof SelfBidException) { + return "You cannot bid on your own auction."; + } + if (current instanceof AuctionClosedException) { + return "Bidding is closed for this item."; + } + if (current instanceof InsufficientBidException) { + return "Bid must meet the current minimum."; + } + if (current instanceof AuctionException) { + return current.getMessage(); + } + current = current.getCause(); + } + return "Failed to place bid."; } - private static Image loadPlaceholder() { - InputStream s = AuctionDetailController.class.getResourceAsStream( - "/images/placeholder.png" + private void shakeBidField() { + PauseTransition pause = new PauseTransition(Duration.millis(120)); + pause.setOnFinished(event -> + bidAmountField.setStyle("-fx-border-color: #f85149;") ); - return (s == null) ? null : new Image(s); + pause.play(); + } + + private String statusStyle(String status) { + if (status == null) { + return "status-chip-success"; + } + String normalized = status.trim().toUpperCase(Locale.ROOT); + return switch (normalized) { + case "ACTIVE" -> "status-chip-success"; + case "CANCELLED" -> "status-chip-warning"; + case "ENDED", "EXPIRED", "SOLD" -> "status-chip-accent"; + default -> "status-chip-success"; + }; + } + + private void shutdownPolling() { + if (pollingService != null) { + pollingService.shutdown(); + } + } + + private static Image loadPlaceholder() { + try ( + InputStream stream = AuctionDetailController.class.getResourceAsStream( + "/images/placeholder.png" + ) + ) { + return stream == null ? null : new Image(stream); + } catch (IOException e) { + return null; + } } } diff --git a/src/main/java/com/auction/client/controllers/CreateAuctionDialogController.java b/src/main/java/com/auction/client/controllers/CreateAuctionDialogController.java new file mode 100644 index 0000000..585b1f4 --- /dev/null +++ b/src/main/java/com/auction/client/controllers/CreateAuctionDialogController.java @@ -0,0 +1,242 @@ +package com.auction.client.controllers; + +import com.auction.shared.Constants; +import com.auction.shared.models.AuctionItem; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.time.Duration; +import java.time.Instant; +import java.util.regex.Pattern; +import javafx.fxml.FXML; +import javafx.scene.control.Label; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; +import javafx.scene.control.TextFormatter; +import javafx.stage.FileChooser; +import javafx.stage.Window; + +public class CreateAuctionDialogController { + + private static final Pattern DECIMAL_PATTERN = Pattern.compile( + "\\d*(?:\\.\\d{0,2})?" + ); + private static final Pattern INTEGER_PATTERN = Pattern.compile("\\d*"); + + @FXML + private TextField titleField; + + @FXML + private TextArea descriptionField; + + @FXML + private TextField categoryField; + + @FXML + private TextField startingPriceField; + + @FXML + private TextField durationField; + + @FXML + private Label imageSummaryLabel; + + @FXML + private Label validationLabel; + + private byte[] image1Bytes; + private byte[] image2Bytes; + private byte[] image3Bytes; + private String image1Name; + private String image2Name; + private String image3Name; + + @FXML + public void initialize() { + startingPriceField.setTextFormatter( + new TextFormatter<>(change -> { + String proposed = change.getControlNewText(); + return DECIMAL_PATTERN.matcher(proposed).matches() ? change : null; + }) + ); + + durationField.setTextFormatter( + new TextFormatter<>(change -> { + String proposed = change.getControlNewText(); + return INTEGER_PATTERN.matcher(proposed).matches() ? change : null; + }) + ); + + updateImageSummary(); + validationLabel.setText("Provide the auction details and optional images."); + } + + @FXML + private void handlePickImage1() { + chooseImage(1); + } + + @FXML + private void handlePickImage2() { + chooseImage(2); + } + + @FXML + private void handlePickImage3() { + chooseImage(3); + } + + public boolean validateFields() { + String title = safeTrim(titleField.getText()); + String description = safeTrim(descriptionField.getText()); + String category = safeTrim(categoryField.getText()); + String priceText = safeTrim(startingPriceField.getText()); + String durationText = safeTrim(durationField.getText()); + + if (title.isEmpty()) { + return fail("Title is required."); + } + if (description.isEmpty()) { + return fail("Description is required."); + } + if (category.isEmpty()) { + return fail("Category is required."); + } + if (priceText.isEmpty()) { + return fail("Starting price is required."); + } + if (durationText.isEmpty()) { + return fail("Duration is required."); + } + + try { + double price = Double.parseDouble(priceText); + int duration = Integer.parseInt(durationText); + if (price <= 0) { + return fail("Starting price must be greater than zero."); + } + if (duration <= 0) { + return fail("Duration must be greater than zero."); + } + } catch (NumberFormatException ex) { + return fail("Price and duration must be numeric."); + } + + validationLabel.setText("Ready to create the auction."); + return true; + } + + public AuctionItem buildAuctionDraft(String sellerUsername) { + long startingPriceCents = Math.round( + Double.parseDouble(safeTrim(startingPriceField.getText())) * 100.0 + ); + int durationMinutes = Integer.parseInt(safeTrim(durationField.getText())); + Instant startTime = Instant.now(); + Instant endTime = startTime.plus(Duration.ofMinutes(durationMinutes)); + + AuctionItem item = new AuctionItem(); + item.setTitle(safeTrim(titleField.getText())); + item.setDescription(safeTrim(descriptionField.getText())); + item.setCategory(safeTrim(categoryField.getText())); + item.setStartingPriceCents(startingPriceCents); + item.setCurrentBidCents(startingPriceCents); + item.setHighestBidderUsername(null); + item.setSellerUsername(sellerUsername); + item.setStartTime(startTime.toString()); + item.setEndTime(endTime.toString()); + item.setCapEndTime( + endTime + .plus(Duration.ofMinutes(Constants.SNIPE_CAP_DEFAULT_MINUTES)) + .toString() + ); + item.setStatus(Constants.STATUS_ACTIVE); + return item; + } + + public byte[] getImage1Bytes() { + return image1Bytes; + } + + public byte[] getImage2Bytes() { + return image2Bytes; + } + + public byte[] getImage3Bytes() { + return image3Bytes; + } + + private void chooseImage(int slot) { + FileChooser chooser = new FileChooser(); + chooser + .getExtensionFilters() + .addAll( + new FileChooser.ExtensionFilter( + "Image Files", + "*.png", + "*.jpg", + "*.jpeg", + "*.gif", + "*.webp" + ) + ); + Window window = + titleField.getScene() == null ? null : titleField.getScene().getWindow(); + File selected = chooser.showOpenDialog(window); + if (selected == null) { + return; + } + + try { + byte[] bytes = Files.readAllBytes(selected.toPath()); + switch (slot) { + case 1 -> { + image1Bytes = bytes; + image1Name = selected.getName(); + } + case 2 -> { + image2Bytes = bytes; + image2Name = selected.getName(); + } + case 3 -> { + image3Bytes = bytes; + image3Name = selected.getName(); + } + default -> { + return; + } + } + updateImageSummary(); + } catch (IOException ex) { + validationLabel.setText("Failed to load image: " + ex.getMessage()); + } + } + + private boolean fail(String message) { + validationLabel.setText(message); + return false; + } + + private void updateImageSummary() { + StringBuilder summary = new StringBuilder(); + appendImage(summary, 1, image1Name); + appendImage(summary, 2, image2Name); + appendImage(summary, 3, image3Name); + imageSummaryLabel.setText( + summary.length() == 0 ? "No images selected" : summary.toString() + ); + } + + private void appendImage(StringBuilder summary, int slot, String fileName) { + if (fileName == null) { + return; + } + if (summary.length() > 0) { + summary.append(" | "); + } + summary.append("Image ").append(slot).append(": ").append(fileName); + } + + private String safeTrim(String value) { + return value == null ? "" : value.trim(); + } +} diff --git a/src/main/java/com/auction/client/controllers/GalleryController.java b/src/main/java/com/auction/client/controllers/GalleryController.java index d6146d8..2e99315 100644 --- a/src/main/java/com/auction/client/controllers/GalleryController.java +++ b/src/main/java/com/auction/client/controllers/GalleryController.java @@ -1,29 +1,49 @@ package com.auction.client.controllers; -import com.auction.client.core.ClientContext; -import com.auction.client.service.PollingService; -import com.auction.client.service.ThumbnailExecutor; -import com.auction.shared.Constants; -import com.auction.shared.models.AuctionItem; import java.io.ByteArrayInputStream; +import java.io.IOException; import java.io.InputStream; +import java.text.NumberFormat; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; + +import com.auction.client.core.ClientContext; +import com.auction.client.service.PollingService; +import com.auction.client.service.ThumbnailExecutor; +import com.auction.client.state.AuctionUiState; +import com.auction.client.util.Toast; +import com.auction.shared.models.AuctionItem; + +import atlantafx.base.theme.Styles; import javafx.application.Platform; +import javafx.collections.ListChangeListener; import javafx.fxml.FXML; -import javafx.scene.control.*; +import javafx.geometry.Pos; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.TextField; import javafx.scene.image.Image; import javafx.scene.image.ImageView; -import javafx.scene.layout.FlowPane; +import javafx.scene.input.MouseButton; import javafx.scene.layout.HBox; +import javafx.scene.layout.TilePane; import javafx.scene.layout.VBox; public class GalleryController { + private static final NumberFormat CURRENCY = NumberFormat.getCurrencyInstance( + Locale.US + ); + + static { + CURRENCY.setCurrency(java.util.Currency.getInstance("ETB")); + } + @FXML - private FlowPane auctionFlow; + private TilePane auctionGrid; @FXML private TextField searchField; @@ -31,158 +51,275 @@ public class GalleryController { @FXML private Label auctionCountLabel; + private final AuctionUiState auctionState = AuctionUiState.getInstance(); private final Map cache = new ConcurrentHashMap<>(); - private static final Image PLACEHOLDER = loadPlaceholder(); - private List allAuctions = List.of(); private PollingService pollingService; + private String query = ""; + private static final Image PLACEHOLDER = loadPlaceholder(); @FXML public void initialize() { - try { - var service = ClientContext.getInstance().getRmiProvider().getService(); - pollingService = new PollingService(); - pollingService.startPolling( - () -> { - try { - List items = service.getActiveAuctions(); - allAuctions = (items == null) ? List.of() : items; - Platform.runLater(this::handleSearch); - } catch (Exception ignored) {} - }, - 2 - ); - render(allAuctions); - } catch (Exception e) { - e.printStackTrace(); + auctionState + .getActiveAuctions() + .addListener((ListChangeListener) change -> render()); + if (searchField != null) { + searchField + .textProperty() + .addListener((obs, oldValue, newValue) -> { + query = + newValue == null ? "" : newValue.trim().toLowerCase(Locale.ROOT); + render(); + }); } + + pollingService = new PollingService(); + pollingService.startPolling( + () -> Platform.runLater(this::refreshAuctions), + 2 + ); + refreshAuctions(); } @FXML private void handleSearch() { - String q = (searchField == null || searchField.getText() == null) - ? "" - : searchField.getText().toLowerCase(); - List filtered = allAuctions + query = + searchField == null || searchField.getText() == null + ? "" + : searchField.getText().trim().toLowerCase(Locale.ROOT); + render(); + } + + @FXML + private void handleBackToDashboard() { + shutdownPolling(); + try { + ClientContext.getInstance() + .getViewLoader() + .loadView("user_dashboard.fxml"); + } catch (Exception e) { + if (auctionCountLabel != null) { + auctionCountLabel.setText("Navigation failed"); + } + Toast.show(auctionGrid, "Navigation failed", Toast.Type.ERROR); + } + } + + private void refreshAuctions() { + try { + List items = ClientContext.getInstance() + .getRmiProvider() + .getService() + .getActiveAuctions(); + auctionState + .getActiveAuctions() + .setAll(items == null ? List.of() : items); + render(); + } catch (Exception e) { + render(); + } + } + + private void render() { + if (auctionGrid == null) { + return; + } + + auctionGrid.getChildren().clear(); + List items = auctionState + .getActiveAuctions() .stream() - .filter( - a -> - a.getTitle().toLowerCase().contains(q) || - a.getCategory().toLowerCase().contains(q) - ) + .filter(item -> item != null && matchesQuery(item)) + .sorted((left, right) -> Integer.compare(left.getId(), right.getId())) .toList(); - render(filtered); - } - private void render(List items) { - auctionFlow.getChildren().clear(); if (items.isEmpty()) { - auctionFlow.getChildren().add(new Label("No auctions found.")); + VBox empty = new VBox(8); + empty.getStyleClass().add("metric-card"); + empty + .getChildren() + .addAll( + new Label("No auctions found"), + new Label("Adjust the search filter or wait for the next refresh.") + ); + auctionGrid.getChildren().add(empty); + auctionCountLabel.setText("0 auction(s)"); return; } - for (AuctionItem item : items) - auctionFlow.getChildren().add(createCard(item)); + + for (AuctionItem item : items) { + auctionGrid.getChildren().add(createCard(item)); + } auctionCountLabel.setText(items.size() + " auction(s)"); } + private boolean matchesQuery(AuctionItem item) { + if (query == null || query.isBlank()) { + return true; + } + return ( + contains(item.getTitle(), query) || + contains(item.getCategory(), query) || + contains(item.getDescription(), query) + ); + } + + private boolean contains(String value, String needle) { + return value != null && value.toLowerCase(Locale.ROOT).contains(needle); + } + private VBox createCard(AuctionItem item) { - VBox card = new VBox(10); - card.getStyleClass().add("metric-card"); - card.setPrefWidth(220); + VBox card = new VBox(12); + card.getStyleClass().addAll("metric-card", Styles.ELEVATED_1); + card.setPrefWidth(244); + card.setMinWidth(244); + card.setMaxWidth(244); - ImageView hero = createThumbView(220, 140); + ImageView hero = createImageView(220, 150); loadThumbAsync(item.getId(), 0, hero); - HBox rail = new HBox(5); - for (int i = 0; i < 3; i++) { - ImageView iv = createThumbView(64, 48); - loadThumbAsync(item.getId(), i, iv); - int idx = i; - iv.setOnMouseClicked(e -> loadDetail(item, idx)); - rail.getChildren().add(iv); + HBox rail = new HBox(6); + for (int index = 0; index < 3; index++) { + ImageView thumb = createImageView(64, 48); + loadThumbAsync(item.getId(), index, thumb); + rail.getChildren().add(thumb); } - Button btn = new Button("View"); - btn.setOnAction(e -> loadDetail(item, 0)); + Label title = new Label(item.getTitle()); + title.setWrapText(true); + title.getStyleClass().add("section-title"); + title.setMaxWidth(220); + title.setPrefWidth(220); + + Label category = new Label( + item.getCategory() == null ? "" : item.getCategory() + ); + category.getStyleClass().add("section-copy"); + + Label status = new Label(item.getStatus() == null ? "" : item.getStatus()); + status.getStyleClass().addAll("status-chip", statusStyle(item.getStatus())); + + Label bid = new Label(formatCurrency(item.getCurrentBidCents())); + bid.getStyleClass().add("metric-value"); + bid.setStyle("-fx-font-size: 18px; -fx-font-weight: 700;"); + + Label seller = new Label( + item.getSellerUsername() == null ? "" : "by " + item.getSellerUsername() + ); + seller.getStyleClass().add("section-copy"); + + HBox buttonBox = new HBox(8); + buttonBox.setAlignment(Pos.CENTER_LEFT); + + Button openButton = new Button("View"); + openButton.getStyleClass().addAll(Styles.FLAT, "secondary-button"); + openButton.setMaxWidth(Double.MAX_VALUE); + openButton.setOnAction(e -> openDetail(item)); + + buttonBox.getChildren().add(openButton); + + card.setOnMouseClicked(event -> { + if ( + event.getButton() == MouseButton.PRIMARY && event.getClickCount() == 1 + ) { + openDetail(item); + } + }); card .getChildren() - .addAll( - hero, - rail, - new Label(item.getTitle()), - new Label(Constants.formatCents(item.getCurrentBidCents())), - btn - ); + .addAll(hero, rail, title, category, status, bid, seller, buttonBox); return card; } - private ImageView createThumbView(double w, double h) { - ImageView iv = new ImageView(); - iv.setFitWidth(w); - iv.setFitHeight(h); - iv.setPreserveRatio(true); - return iv; + private ImageView createImageView(double width, double height) { + ImageView imageView = new ImageView(); + imageView.setFitWidth(width); + imageView.setFitHeight(height); + imageView.setPreserveRatio(true); + imageView.getStyleClass().add("image-placeholder"); + return imageView; + } + + private void openDetail(AuctionItem item) { + shutdownPolling(); + try { + ClientContext ctx = ClientContext.getInstance(); + ctx.setPreviousViewName("gallery.fxml"); + ctx.setCurrentAuctionId(item.getId()); + AuctionDetailController controller = ctx + .getViewLoader() + .loadView("auction_detail.fxml"); + controller.setAuction(item); + } catch (Exception e) { + if (auctionCountLabel != null) { + auctionCountLabel.setText("Open failed"); + } + Toast.show(auctionGrid, "Open failed", Toast.Type.ERROR); + } } - private void loadThumbAsync(int id, int idx, ImageView iv) { - String key = id + ":" + idx; - if (cache.containsKey(key)) { - iv.setImage(cache.get(key)); + private void loadThumbAsync(int auctionId, int index, ImageView target) { + String key = auctionId + ":" + index; + Image cached = cache.get(key); + if (cached != null) { + target.setImage(cached); return; } + CompletableFuture.supplyAsync( () -> { try { - byte[] b = ClientContext.getInstance() + byte[] bytes = ClientContext.getInstance() .getRmiProvider() .getService() - .getThumbnail(id, idx); - return (b == null || b.length == 0) + .getThumbnail(auctionId, index); + return bytes == null || bytes.length == 0 ? null - : new Image(new ByteArrayInputStream(b)); + : new Image(new ByteArrayInputStream(bytes)); } catch (Exception e) { return null; } }, ThumbnailExecutor.getExecutor() - ).thenAccept(img -> { - Image fin = (img != null) ? img : PLACEHOLDER; - cache.put(key, fin); - Platform.runLater(() -> iv.setImage(fin)); + ).thenAccept(image -> { + Image finalImage = image == null ? PLACEHOLDER : image; + cache.put(key, finalImage); + Platform.runLater(() -> target.setImage(finalImage)); }); } - private void loadDetail(AuctionItem item, int idx) { - if (pollingService != null) pollingService.shutdown(); - try { - ClientContext ctx = ClientContext.getInstance(); - ctx.setPreviousViewName("gallery.fxml"); - var loader = (AuctionDetailController) ctx - .getViewLoader() - .loadView("auction_detail.fxml"); - loader.loadAuction(item.getId()); - loader.showHeroImageIndex(idx); - } catch (Exception e) { - e.printStackTrace(); + private String formatCurrency(long cents) { + return CURRENCY.format(cents / 100.0); + } + + private String statusStyle(String status) { + if (status == null) { + return "status-chip-success"; } + String normalized = status.trim().toUpperCase(Locale.ROOT); + return switch (normalized) { + case "ACTIVE" -> "status-chip-success"; + case "CANCELLED" -> "status-chip-warning"; + case "ENDED", "EXPIRED", "SOLD" -> "status-chip-accent"; + default -> "status-chip-success"; + }; } - @FXML - private void handleBackToDashboard() { - if (pollingService != null) pollingService.shutdown(); - try { - ClientContext.getInstance() - .getViewLoader() - .loadView("user_dashboard.fxml"); - } catch (Exception e) { - e.printStackTrace(); + private void shutdownPolling() { + if (pollingService != null) { + pollingService.shutdown(); } } private static Image loadPlaceholder() { - InputStream s = GalleryController.class.getResourceAsStream( - "/images/placeholder.png" - ); - return (s == null) ? null : new Image(s); + try ( + InputStream stream = GalleryController.class.getResourceAsStream( + "/images/placeholder.png" + ) + ) { + return stream == null ? null : new Image(stream); + } catch (IOException e) { + return null; + } } } diff --git a/src/main/java/com/auction/client/controllers/UserDashboardController.java b/src/main/java/com/auction/client/controllers/UserDashboardController.java index 42ba934..dfcd5f7 100644 --- a/src/main/java/com/auction/client/controllers/UserDashboardController.java +++ b/src/main/java/com/auction/client/controllers/UserDashboardController.java @@ -1,8 +1,12 @@ package com.auction.client.controllers; +import atlantafx.base.theme.Styles; import com.auction.client.core.ClientContext; import com.auction.client.service.PollingService; import com.auction.client.service.ThumbnailExecutor; +import com.auction.client.state.AuctionUiState; +import com.auction.client.util.AuctionCsvExporter; +import com.auction.client.util.MockDataGenerator; import com.auction.shared.Constants; import com.auction.shared.interfaces.IAuctionService; import com.auction.shared.models.AuctionItem; @@ -10,369 +14,634 @@ import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; -import java.nio.file.Files; +import java.text.NumberFormat; import java.time.Duration; import java.time.Instant; +import java.util.Comparator; import java.util.List; +import java.util.Locale; import java.util.Map; +import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; import javafx.application.Platform; +import javafx.beans.property.ReadOnlyObjectWrapper; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.collections.transformation.FilteredList; +import javafx.event.ActionEvent; import javafx.fxml.FXML; -import javafx.scene.control.*; +import javafx.fxml.FXMLLoader; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.control.Alert; +import javafx.scene.control.Button; +import javafx.scene.control.ButtonBar; +import javafx.scene.control.ButtonType; +import javafx.scene.control.Dialog; +import javafx.scene.control.Label; +import javafx.scene.control.MenuButton; +import javafx.scene.control.MenuItem; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableRow; +import javafx.scene.control.TableView; import javafx.scene.image.Image; import javafx.scene.image.ImageView; +import javafx.scene.input.MouseButton; import javafx.stage.FileChooser; +import javafx.stage.Modality; +import javafx.stage.Window; +import javafx.util.Callback; public class UserDashboardController { + private static final NumberFormat CURRENCY = NumberFormat.getCurrencyInstance( + Locale.US + ); + + static { + CURRENCY.setCurrency(java.util.Currency.getInstance("ETB")); + } + + @FXML + private Label statusLabel; + + @FXML + private Label marketCountLabel; + + @FXML + private Label listingsCountLabel; + + @FXML + private Label bidsCountLabel; + + @FXML + private Label winsCountLabel; + + @FXML + private Button createAuctionButton; + + @FXML + private Button galleryButton; + + @FXML + private Button exportButton; + + @FXML + private Button refreshButton; + @FXML - private TableView marketTable, myListingsTable, wonAuctionsTable; + private TableView marketTable; + + @FXML + private TableView myListingsTable; @FXML private TableView myBidsTable; @FXML - private TextField titleField, categoryField, priceField, endTimeField; + private TableView wonAuctionsTable; @FXML - private TextArea descArea; + private TableColumn marketThumbnailColumn; @FXML - private Label imagesLabel, statusLabel, marketCountLabel, listingsCountLabel, bidsCountLabel, winsCountLabel; + private TableColumn marketActionsColumn; - private byte[] img1Bytes, img2Bytes, img3Bytes; - private final Map thumbnailCache = new ConcurrentHashMap<>(); - private static final Image PLACEHOLDER = new Image( - UserDashboardController.class.getResourceAsStream("/images/placeholder.png") + @FXML + private TableColumn marketCurrentBidColumn; + + @FXML + private TableColumn myListingsThumbnailColumn; + + @FXML + private TableColumn myListingsActionsColumn; + + @FXML + private TableColumn myListingsCurrentBidColumn; + + @FXML + private TableColumn myBidsAmountColumn; + + @FXML + private TableColumn wonCurrentBidColumn; + + private final AuctionUiState auctionState = AuctionUiState.getInstance(); + private final ObservableList myListings = + FXCollections.observableArrayList(); + private final ObservableList myBids = + FXCollections.observableArrayList(); + private final ObservableList wonAuctions = + FXCollections.observableArrayList(); + private final FilteredList myListingsView = new FilteredList<>( + myListings, + item -> true ); + private final Map thumbnailCache = new ConcurrentHashMap<>(); private PollingService pollingService; + private static final Image PLACEHOLDER = loadPlaceholder(); @FXML public void initialize() { + configureTopActions(); + configureAuctionTable( + marketTable, + marketThumbnailColumn, + marketActionsColumn + ); + configureAuctionTable( + myListingsTable, + myListingsThumbnailColumn, + myListingsActionsColumn + ); + configureAuctionTable(wonAuctionsTable, null, null); + configureMoneyColumns(); + + marketTable.setItems(auctionState.getActiveAuctions()); + myListingsTable.setItems(myListingsView); + myBidsTable.setItems(myBids); + wonAuctionsTable.setItems(wonAuctions); + pollingService = new PollingService(); pollingService.startPolling( () -> Platform.runLater(this::refreshDashboard), 2 ); - - setupTableThumbnails(marketTable); - setupRowDoubleClick(marketTable); - setupRowDoubleClick(myListingsTable); - setupRowDoubleClick(wonAuctionsTable); - refreshDashboard(); } - private void setupTableThumbnails(TableView table) { - TableColumn thumbCol = new TableColumn<>(""); - thumbCol.setPrefWidth(80); - thumbCol.setCellFactory(col -> - new TableCell<>() { - private final ImageView iv = new ImageView(); + private void configureTopActions() { + if (createAuctionButton != null) createAuctionButton + .getStyleClass() + .add(Styles.ACCENT); + if (galleryButton != null) galleryButton.getStyleClass().add(Styles.FLAT); + if (exportButton != null) exportButton.getStyleClass().add(Styles.FLAT); + if (refreshButton != null) refreshButton.getStyleClass().add(Styles.FLAT); + } - { - iv.setFitWidth(70); - iv.setFitHeight(50); - iv.setPreserveRatio(true); - } + private void configureMoneyColumns() { + if (marketCurrentBidColumn != null) marketCurrentBidColumn.setCellFactory( + currencyCellFactory() + ); + if ( + myListingsCurrentBidColumn != null + ) myListingsCurrentBidColumn.setCellFactory(currencyCellFactory()); + if (myBidsAmountColumn != null) myBidsAmountColumn.setCellFactory( + currencyCellFactory() + ); + if (wonCurrentBidColumn != null) wonCurrentBidColumn.setCellFactory( + currencyCellFactory() + ); + } + private Callback< + TableColumn, + TableCell + > currencyCellFactory() { + return column -> + new TableCell<>() { @Override - protected void updateItem(ImageView item, boolean empty) { - super.updateItem(item, empty); - if (empty) { - setGraphic(null); - } else { - AuctionItem auction = getTableView().getItems().get(getIndex()); - loadThumbnailAsync(auction.getId(), 0, iv); - setGraphic(iv); - } + protected void updateItem(Long value, boolean empty) { + super.updateItem(value, empty); + setText(empty || value == null ? null : formatCurrency(value)); } - } - ); - table.getColumns().add(0, thumbCol); + }; } - private void setupRowDoubleClick(TableView table) { + private void configureAuctionTable( + TableView table, + TableColumn thumbnailColumn, + TableColumn actionsColumn + ) { + if (table == null) { + return; + } + table.setRowFactory(tv -> { TableRow row = new TableRow<>(); row.setOnMouseClicked(event -> { - if (!row.isEmpty() && event.getClickCount() == 2) { - handleOpenAuctionDetail(); + if ( + event.getButton() == MouseButton.PRIMARY && + event.getClickCount() == 2 && + !row.isEmpty() + ) { + openAuctionDetail(row.getItem(), "user_dashboard.fxml"); } }); return row; }); - } - private void refreshDashboard() { - try { - ClientContext ctx = ClientContext.getInstance(); - IAuctionService service = ctx.getRmiProvider().getService(); + if (thumbnailColumn != null) { + thumbnailColumn.setCellValueFactory(param -> + new ReadOnlyObjectWrapper<>(param.getValue()) + ); + thumbnailColumn.setCellFactory(column -> + new TableCell<>() { + private final ImageView imageView = new ImageView(); + + { + imageView.setFitWidth(54); + imageView.setFitHeight(54); + imageView.setPreserveRatio(true); + imageView.getStyleClass().add("image-thumb"); + } - List active = service.getActiveAuctions(); - List mine = service.getActiveAuctionsBySeller( - ctx.getUsername(), - ctx.getSessionToken() + @Override + protected void updateItem(AuctionItem item, boolean empty) { + super.updateItem(item, empty); + if (empty || item == null) { + setGraphic(null); + return; + } + loadThumbnailAsync(item.getId(), 0, imageView); + setGraphic(imageView); + } + } ); - List bids = service.getMyBids(ctx.getSessionToken()); - List won = service.getMyWonAuctions(ctx.getSessionToken()); + } - marketTable.getItems().setAll(active); - myListingsTable.getItems().setAll(mine); - myBidsTable.getItems().setAll(bids); - wonAuctionsTable.getItems().setAll(won); + if (actionsColumn != null) { + actionsColumn.setCellValueFactory(param -> + new ReadOnlyObjectWrapper<>(param.getValue()) + ); + actionsColumn.setCellFactory(column -> + new TableCell<>() { + private final MenuButton menuButton = new MenuButton("Actions"); - updateCount(marketCountLabel, active.size()); - updateCount(listingsCountLabel, mine.size()); - updateCount(bidsCountLabel, bids.size()); - updateCount(winsCountLabel, won.size()); + { + menuButton.getStyleClass().add(Styles.FLAT); + menuButton.setMaxWidth(Double.MAX_VALUE); + } - statusLabel.setText("Dashboard updated."); - } catch (Exception e) { - statusLabel.setText("Update failed: " + e.getMessage()); - } - } + @Override + protected void updateItem(AuctionItem item, boolean empty) { + super.updateItem(item, empty); + if (empty || item == null) { + setGraphic(null); + return; + } - @FXML - private void handleRefreshDashboard() { - refreshDashboard(); + menuButton.getItems().setAll(buildActionMenu(item)); + setGraphic(menuButton); + } + } + ); + } } - private void updateCount(Label label, int count) { - if (label != null) label.setText(String.valueOf(count)); - } + private List buildActionMenu(AuctionItem item) { + MenuItem viewDetails = new MenuItem("View Details"); + viewDetails.setOnAction(e -> + openAuctionDetail(item, "user_dashboard.fxml") + ); - @FXML - private void handleOpenAuctionDetail() { - AuctionItem selected = getSelectedAuction(); - if (selected != null) { - try { - if (pollingService != null) pollingService.shutdown(); - ClientContext ctx = ClientContext.getInstance(); - ctx.setCurrentAuctionId(selected.getId()); - ctx.setPreviousViewName("user_dashboard.fxml"); - ctx.getViewLoader().loadView("auction_detail.fxml"); - } catch (IOException e) { - e.printStackTrace(); - } + if (ownsListing(item) && isActive(item)) { + MenuItem cancelListing = new MenuItem("Cancel Listing"); + cancelListing.setOnAction(e -> + performAuctionAction(item, this::cancelAuction) + ); + return List.of(viewDetails, cancelListing); } - } - private AuctionItem getSelectedAuction() { - if ( - marketTable.getSelectionModel().getSelectedItem() != null - ) return marketTable.getSelectionModel().getSelectedItem(); - if ( - myListingsTable.getSelectionModel().getSelectedItem() != null - ) return myListingsTable.getSelectionModel().getSelectedItem(); - if ( - wonAuctionsTable.getSelectionModel().getSelectedItem() != null - ) return wonAuctionsTable.getSelectionModel().getSelectedItem(); - return null; - } - - private void loadThumbnailAsync(int auctionId, int index, ImageView target) { - String key = auctionId + ":" + index; - if (thumbnailCache.containsKey(key)) { - target.setImage(thumbnailCache.get(key)); - return; + if (ownsListing(item) && isRelistable(item)) { + MenuItem relist = new MenuItem("Relist"); + relist.setOnAction(e -> performAuctionAction(item, this::relistAuction)); + return List.of(viewDetails, relist); } - CompletableFuture.supplyAsync( - () -> { - try { - byte[] bytes = ClientContext.getInstance() - .getRmiProvider() - .getService() - .getThumbnail(auctionId, index); - return (bytes == null || bytes.length == 0) - ? null - : new Image(new ByteArrayInputStream(bytes)); - } catch (Exception e) { - return null; - } - }, - ThumbnailExecutor.getExecutor() - ).thenAccept(image -> { - Image finalImg = (image != null) ? image : PLACEHOLDER; - thumbnailCache.put(key, finalImg); - Platform.runLater(() -> target.setImage(finalImg)); - }); + + return List.of(viewDetails); } @FXML private void handleCreateAuction() { try { - long cents = (long) (Double.parseDouble(priceField.getText()) * 100); - Instant end = Instant.now().plus( - Duration.ofMinutes(Integer.parseInt(endTimeField.getText())) + FXMLLoader loader = new FXMLLoader( + getClass().getResource("/fxml/create_auction.fxml") ); - - AuctionItem item = new AuctionItem( - 0, - titleField.getText(), - descArea.getText(), - categoryField.getText(), - cents, - ClientContext.getInstance().getUsername(), - Instant.now().toString(), - end.toString(), - null + Parent content = loader.load(); + CreateAuctionDialogController controller = loader.getController(); + + Dialog dialog = new Dialog<>(); + dialog.setTitle("Create Auction"); + Window owner = window(); + if (owner != null) { + dialog.initOwner(owner); + } + dialog.initModality(Modality.WINDOW_MODAL); + ButtonType createType = new ButtonType( + "Create Auction", + ButtonBar.ButtonData.OK_DONE ); + dialog + .getDialogPane() + .getButtonTypes() + .addAll(createType, ButtonType.CANCEL); + dialog.getDialogPane().setContent(content); + dialog.getDialogPane().getStylesheets().add(styleSheet()); + dialog + .getDialogPane() + .getStyleClass() + .addAll("panel-card", "dialog-surface"); + + dialog.setOnShown(event -> { + Node createNode = dialog.getDialogPane().lookupButton(createType); + if (createNode != null) { + createNode.addEventFilter(ActionEvent.ACTION, action -> { + if (!controller.validateFields()) { + action.consume(); + } + }); + } + }); + Optional result = dialog.showAndWait(); + if (result.isEmpty() || result.get() != createType) { + return; + } + + AuctionItem draft = controller.buildAuctionDraft( + ClientContext.getInstance().getUsername() + ); ClientContext ctx = ClientContext.getInstance(); - int id = ctx + int auctionId = ctx .getRmiProvider() .getService() .createAuction( - item, - img1Bytes, - img2Bytes, - img3Bytes, + draft, + controller.getImage1Bytes(), + controller.getImage2Bytes(), + controller.getImage3Bytes(), ctx.getSessionToken() ); - statusLabel.setText("Auction #" + id + " created."); - clearAuctionForm(); + statusLabel.setText("Auction #" + auctionId + " created."); refreshDashboard(); } catch (Exception e) { - statusLabel.setText("Error: " + e.getMessage()); + statusLabel.setText("Create failed: " + e.getMessage()); } } - private void clearAuctionForm() { - titleField.clear(); - descArea.clear(); - categoryField.clear(); - priceField.clear(); - endTimeField.clear(); - img1Bytes = img2Bytes = img3Bytes = null; - imagesLabel.setText("No images selected"); - } - @FXML - private void handleCancelAuction() { - performAction(myListingsTable.getSelectionModel().getSelectedItem(), s -> - ClientContext.getInstance() - .getRmiProvider() - .getService() - .cancelAuction(s.getId(), ClientContext.getInstance().getSessionToken()) - ); + private void handleRefreshDashboard() { + refreshDashboard(); } @FXML - private void handleRelistAuction() { - performAction(myListingsTable.getSelectionModel().getSelectedItem(), s -> - ClientContext.getInstance() - .getRmiProvider() - .getService() - .relistAuction( - s.getId(), - Instant.now().plus(Duration.ofDays(1)).toString(), - ClientContext.getInstance().getSessionToken() - ) - ); - } - - private interface AuctionAction { - void execute(AuctionItem item) throws Exception; + private void handleOpenGallery() { + shutdownPolling(); + try { + ClientContext.getInstance().getViewLoader().loadView("gallery.fxml"); + } catch (IOException e) { + statusLabel.setText("Navigation failed: " + e.getMessage()); + } } - private void performAction(AuctionItem item, AuctionAction action) { - if (item == null) return; + @FXML + private void handleExportCSV() { try { - action.execute(item); - refreshDashboard(); + FileChooser chooser = new FileChooser(); + chooser + .getExtensionFilters() + .add(new FileChooser.ExtensionFilter("CSV Files", "*.csv")); + chooser.setInitialFileName("auctions.csv"); + File out = chooser.showSaveDialog(window()); + if (out == null) { + return; + } + + AuctionCsvExporter.writeToFile(marketTable.getItems(), out.toPath()); + statusLabel.setText("CSV exported to " + out.getName()); } catch (Exception e) { - statusLabel.setText("Action failed: " + e.getMessage()); + statusLabel.setText("Export failed: " + e.getMessage()); } } @FXML private void handleLogout() { try { + shutdownPolling(); ClientContext ctx = ClientContext.getInstance(); ctx.getRmiProvider().getService().logout(ctx.getSessionToken()); ctx.clearSession(); ctx.getViewLoader().loadView("login.fxml"); } catch (Exception e) { - statusLabel.setText("Logout failed"); + statusLabel.setText("Logout failed: " + e.getMessage()); } } - @FXML - private void handleOpenGallery() { - if (pollingService != null) pollingService.shutdown(); + private void refreshDashboard() { try { - ClientContext.getInstance().getViewLoader().loadView("gallery.fxml"); + ClientContext ctx = ClientContext.getInstance(); + IAuctionService service = ctx.getRmiProvider().getService(); + String token = ctx.getSessionToken(); + String username = ctx.getUsername(); + + List active = sortById(service.getActiveAuctions()); + List listings = sortById( + service.getAuctionsBySeller(username, token) + ); + List bids = service.getMyBids(token); + List won = sortById(service.getMyWonAuctions(token)); + + auctionState.getActiveAuctions().setAll(active); + myListings.setAll(listings); + myListingsView.setPredicate(item -> item != null && ownsListing(item)); + myBids.setAll(bids == null ? List.of() : bids); + wonAuctions.setAll(won); + + updateCount(marketCountLabel, auctionState.getActiveAuctions().size()); + updateCount(listingsCountLabel, myListings.size()); + updateCount(bidsCountLabel, myBids.size()); + updateCount(winsCountLabel, wonAuctions.size()); + + statusLabel.setText("Dashboard updated."); } catch (Exception e) { - statusLabel.setText("Navigation failed: " + e.getMessage()); + auctionState + .getActiveAuctions() + .setAll(MockDataGenerator.getMockAuctions()); + updateCount(marketCountLabel, auctionState.getActiveAuctions().size()); + updateCount(listingsCountLabel, myListings.size()); + updateCount(bidsCountLabel, myBids.size()); + updateCount(winsCountLabel, wonAuctions.size()); + statusLabel.setText("Using mock auctions: " + e.getMessage()); } } - @FXML - private void handleExportCSV() { - try { - ClientContext ctx = ClientContext.getInstance(); - byte[] bytes = ctx - .getRmiProvider() - .getService() - .exportAuctionsToCSV(ctx.getSessionToken()); + private void performAuctionAction(AuctionItem item, AuctionAction action) { + if (item == null) { + return; + } - FileChooser fc = new FileChooser(); - fc.getExtensionFilters().add( - new FileChooser.ExtensionFilter("CSV Files", "*.csv") - ); - fc.setInitialFileName("auctions.csv"); - File out = fc.showSaveDialog(marketTable.getScene().getWindow()); - if (out != null) { - Files.write(out.toPath(), bytes); - statusLabel.setText("CSV exported to " + out.getName()); + Alert alert = new Alert(Alert.AlertType.CONFIRMATION); + alert.setTitle("Confirm Action"); + alert.setHeaderText(item.getTitle()); + alert.setContentText("Proceed with this auction action?"); + + ButtonType yesButton = new ButtonType("Proceed", ButtonBar.ButtonData.YES); + ButtonType noButton = new ButtonType("Cancel", ButtonBar.ButtonData.NO); + alert.getButtonTypes().setAll(yesButton, noButton); + + Optional result = alert.showAndWait(); + if (result.isPresent() && result.get() == yesButton) { + try { + action.execute(item); + refreshDashboard(); + } catch (Exception e) { + statusLabel.setText("Action failed: " + e.getMessage()); } + } + } + + private void cancelAuction(AuctionItem item) throws Exception { + ClientContext ctx = ClientContext.getInstance(); + ctx + .getRmiProvider() + .getService() + .cancelAuction(item.getId(), ctx.getSessionToken()); + } + + private void relistAuction(AuctionItem item) throws Exception { + ClientContext ctx = ClientContext.getInstance(); + Instant newEnd = Instant.now().plus(Duration.ofDays(1)); + ctx + .getRmiProvider() + .getService() + .relistAuction(item.getId(), newEnd.toString(), ctx.getSessionToken()); + } + + private void openAuctionDetail(AuctionItem item, String previousViewName) { + if (item == null) { + return; + } + + shutdownPolling(); + try { + ClientContext ctx = ClientContext.getInstance(); + ctx.setPreviousViewName(previousViewName); + ctx.setCurrentAuctionId(item.getId()); + AuctionDetailController controller = ctx + .getViewLoader() + .loadView("auction_detail.fxml"); + controller.setAuction(item); } catch (Exception e) { - statusLabel.setText("Export failed: " + e.getMessage()); + statusLabel.setText("Open detail failed: " + e.getMessage()); } } - @FXML - private void handlePickImg1() { - img1Bytes = pickImage(); - updateImagesLabel(); + private void updateCount(Label label, int count) { + if (label != null) { + label.setText(String.valueOf(count)); + } } - @FXML - private void handlePickImg2() { - img2Bytes = pickImage(); - updateImagesLabel(); + private boolean ownsListing(AuctionItem item) { + String username = ClientContext.getInstance().getUsername(); + return ( + item != null && + username != null && + username.equals(item.getSellerUsername()) + ); } - @FXML - private void handlePickImg3() { - img3Bytes = pickImage(); - updateImagesLabel(); + private boolean isActive(AuctionItem item) { + return ( + item != null && + item.getStatus() != null && + Constants.STATUS_ACTIVE.equalsIgnoreCase(item.getStatus()) + ); } - private byte[] pickImage() { - FileChooser fc = new FileChooser(); - fc - .getExtensionFilters() - .add(new FileChooser.ExtensionFilter("Images", "*.jpg", "*.png")); - File f = fc.showOpenDialog(marketTable.getScene().getWindow()); - if (f != null && f.length() <= Constants.MAX_IMAGE_SIZE_BYTES) { - try { - return Files.readAllBytes(f.toPath()); - } catch (IOException e) { - return null; - } + private boolean isRelistable(AuctionItem item) { + if (item == null || item.getStatus() == null) { + return false; + } + String status = item.getStatus().trim().toUpperCase(Locale.ROOT); + return ( + status.equals(Constants.STATUS_EXPIRED) || + status.equals(Constants.STATUS_CANCELLED) || + status.equals("ENDED") + ); + } + + private List sortById(List items) { + if (items == null) { + return List.of(); + } + return items + .stream() + .filter(item -> item != null) + .sorted(Comparator.comparingInt(AuctionItem::getId)) + .toList(); + } + + private String formatCurrency(long cents) { + return CURRENCY.format(cents / 100.0); + } + + private Window window() { + Scene scene = + createAuctionButton == null ? null : createAuctionButton.getScene(); + if (scene == null && marketTable != null) { + scene = marketTable.getScene(); + } + return scene == null ? null : scene.getWindow(); + } + + private String styleSheet() { + return getClass().getResource("/css/style.css").toExternalForm(); + } + + private void shutdownPolling() { + if (pollingService != null) { + pollingService.shutdown(); + } + } + + private static Image loadPlaceholder() { + try ( + var stream = UserDashboardController.class.getResourceAsStream( + "/images/placeholder.png" + ) + ) { + return stream == null ? null : new Image(stream); + } catch (IOException e) { + return null; } - return null; } - private void updateImagesLabel() { - int count = - (img1Bytes != null ? 1 : 0) + - (img2Bytes != null ? 1 : 0) + - (img3Bytes != null ? 1 : 0); - imagesLabel.setText(count + " images selected"); + private void loadThumbnailAsync(int auctionId, int index, ImageView target) { + String key = auctionId + ":" + index; + Image cached = thumbnailCache.get(key); + if (cached != null) { + target.setImage(cached); + return; + } + + CompletableFuture.supplyAsync( + () -> { + try { + byte[] bytes = ClientContext.getInstance() + .getRmiProvider() + .getService() + .getThumbnail(auctionId, index); + return bytes == null || bytes.length == 0 + ? null + : new Image(new ByteArrayInputStream(bytes)); + } catch (Exception e) { + return null; + } + }, + ThumbnailExecutor.getExecutor() + ).thenAccept(image -> { + Image finalImage = image == null ? PLACEHOLDER : image; + thumbnailCache.put(key, finalImage); + Platform.runLater(() -> target.setImage(finalImage)); + }); + } + + private interface AuctionAction { + void execute(AuctionItem item) throws Exception; } } diff --git a/src/main/java/com/auction/client/state/AuctionUiState.java b/src/main/java/com/auction/client/state/AuctionUiState.java new file mode 100644 index 0000000..49395ca --- /dev/null +++ b/src/main/java/com/auction/client/state/AuctionUiState.java @@ -0,0 +1,26 @@ +package com.auction.client.state; + +import com.auction.shared.models.AuctionItem; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * Shared client-side auction state so the dashboard table and gallery render the same live data. + */ +public final class AuctionUiState { + + private static final AuctionUiState INSTANCE = new AuctionUiState(); + + private final ObservableList activeAuctions = + FXCollections.observableArrayList(); + + private AuctionUiState() {} + + public static AuctionUiState getInstance() { + return INSTANCE; + } + + public ObservableList getActiveAuctions() { + return activeAuctions; + } +} diff --git a/src/main/java/com/auction/client/util/AuctionCsvExporter.java b/src/main/java/com/auction/client/util/AuctionCsvExporter.java new file mode 100644 index 0000000..399e9cb --- /dev/null +++ b/src/main/java/com/auction/client/util/AuctionCsvExporter.java @@ -0,0 +1,71 @@ +package com.auction.client.util; + +import com.auction.shared.models.AuctionItem; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Collection; + +/** + * Client-side CSV export helper that serializes the currently visible auction rows. + */ +public final class AuctionCsvExporter { + + private AuctionCsvExporter() {} + + public static String toCsv(Collection items) { + StringBuilder builder = new StringBuilder(); + builder.append( + "AuctionID,Title,Description,Category,StartingPriceCents,CurrentBidCents,HighestBidder,Seller,Status,StartTime,EndTime,CapEndTime\n" + ); + + if (items == null) { + return builder.toString(); + } + + for (AuctionItem item : items) { + if (item == null) { + continue; + } + appendRow(builder, item); + } + + return builder.toString(); + } + + public static void writeToFile(Collection items, Path output) + throws IOException { + Files.writeString(output, toCsv(items), StandardCharsets.UTF_8); + } + + private static void appendRow(StringBuilder builder, AuctionItem item) { + builder.append(item.getId()).append(','); + builder.append(escape(item.getTitle())).append(','); + builder.append(escape(item.getDescription())).append(','); + builder.append(escape(item.getCategory())).append(','); + builder.append(item.getStartingPriceCents()).append(','); + builder.append(item.getCurrentBidCents()).append(','); + builder.append(escape(item.getHighestBidderUsername())).append(','); + builder.append(escape(item.getSellerUsername())).append(','); + builder.append(escape(item.getStatus())).append(','); + builder.append(escape(item.getStartTime())).append(','); + builder.append(escape(item.getEndTime())).append(','); + builder.append(escape(item.getCapEndTime())).append('\n'); + } + + private static String escape(String value) { + if (value == null) { + return ""; + } + if ( + value.indexOf(',') >= 0 || + value.indexOf('"') >= 0 || + value.indexOf('\n') >= 0 || + value.indexOf('\r') >= 0 + ) { + return '"' + value.replace("\"", "\"\"") + '"'; + } + return value; + } +} diff --git a/src/main/java/com/auction/client/util/MockDataGenerator.java b/src/main/java/com/auction/client/util/MockDataGenerator.java new file mode 100644 index 0000000..3b4daff --- /dev/null +++ b/src/main/java/com/auction/client/util/MockDataGenerator.java @@ -0,0 +1,387 @@ +package com.auction.client.util; + +import java.time.Duration; +import java.time.Instant; + +import com.auction.shared.Constants; +import com.auction.shared.models.AuctionItem; + +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + +/** + * Mock data used as a safe fallback when the live service cannot be reached during demos. + */ +public final class MockDataGenerator { + + private MockDataGenerator() {} + + public static ObservableList getMockAuctions() { + ObservableList items = FXCollections.observableArrayList(); + Instant now = Instant.now(); + + items.add( + createAuction( + 101, + "Handcrafted Walnut Executive Desk with Concealed Drawers and a Shockingly Long Title Intended to Stress the Layout Wrapping Behaviour in Every Surface", + "A premium walnut desk with hidden cable channels, brass pull handles, and a deliberately overlong description that keeps going to prove the UI can wrap text cleanly without clipping, crashing, or making the gallery card collapse into unreadable mush.", + "Furniture", + 125000, + 132500, + "office-buyer", + "seller-alice", + Constants.STATUS_ACTIVE, + now.minus(Duration.ofHours(4)), + now.plus(Duration.ofHours(16)), + "auction_1_img_1.jpg", + "auction_1_img_2.jpg", + "auction_1_img_3.jpg" + ) + ); + + items.add( + createAuction( + 102, + "Limited-Run Studio Headphones", + "Balanced armature headphones in near-mint condition.", + "Electronics", + 30000, + 0, + null, + "seller-bob", + Constants.STATUS_ACTIVE, + now.minus(Duration.ofHours(2)), + now.plus(Duration.ofHours(8)), + "auction_2_img_1.jpg", + "auction_2_img_2.jpg", + "auction_2_img_3.jpg" + ) + ); + + items.add( + createAuction( + 103, + "Massive Bid Artifact with a Value So Large It Exists Primarily to Verify Currency Formatting Across Thousands Separators and Large Magnitudes", + "This item carries a very large live bid to ensure NumberFormat rendering stays stable even when the amounts are well past normal demo territory.", + "Collectibles", + 250000000, + 275000000, + "collector-max", + "seller-charlie", + Constants.STATUS_ACTIVE, + now.minus(Duration.ofHours(1)), + now.plus(Duration.ofDays(1)), + "auction_3_img_1.jpg", + "auction_3_img_2.jpg", + "auction_3_img_3.jpg" + ) + ); + + items.add( + createAuction( + 104, + "Gallery Piece With No Images", + "Empty image lists are intentional here so the gallery and detail views must fall back to the shared placeholder treatment.", + "Art", + 45000, + 45000, + null, + "seller-dana", + Constants.STATUS_CANCELLED, + now.minus(Duration.ofDays(2)), + now.minus(Duration.ofHours(4)), + "auction_4_img_1.jpg", + "auction_4_img_2.jpg", + "auction_4_img_3.jpg" + ) + ); + + items.add( + createAuction( + 105, + "Ended Vintage Camera With Zero Bids", + "A retired camera listing used to test ended-state handling in the UI and relist actions.", + "Electronics", + 55000, + 55000, + null, + "seller-ellen", + "ENDED", + now.minus(Duration.ofDays(3)), + now.minus(Duration.ofHours(12)), + "auction_5_img_1.jpg", + "auction_5_img_2.jpg", + "auction_5_img_3.jpg" + ) + ); + + items.add( + createAuction( + 106, + "Oversized Bookshelf Package", + "Bookshelf listing with a normal amount of text but an intentionally large bid count to exercise currency labels.", + "Furniture", + 2500000, + 3125000, + "reader-one", + "seller-alice", + Constants.STATUS_ACTIVE, + now.minus(Duration.ofHours(8)), + now.plus(Duration.ofDays(2)), + "auction_6_img_1.jpg", + "auction_6_img_2.jpg", + "auction_6_img_3.jpg" + ) + ); + + items.add( + createAuction( + 107, + "Cancelled Vinyl Collection", + "A cancelled batch of classic records with no bids and no images.", + "Music", + 10000, + 10000, + null, + "seller-bob", + Constants.STATUS_CANCELLED, + now.minus(Duration.ofDays(1)), + now.minus(Duration.ofHours(6)), + "auction_1_img_1.jpg", + "auction_1_img_2.jpg", + "auction_1_img_3.jpg" + ) + ); + + items.add( + createAuction( + 108, + "Retro Game Console Bundle With Extremely, Almost Comically, Needlessly Long Name For Wrapping Validation Purposes", + "Bundle contains several cartridges and a controller. This description is also much longer than a normal one to force wrapping.", + "Electronics", + 78000, + 84500, + "gamer-zed", + "seller-charlie", + Constants.STATUS_ACTIVE, + now.minus(Duration.ofHours(6)), + now.plus(Duration.ofHours(6)), + "auction_2_img_1.jpg", + "auction_2_img_2.jpg", + "auction_2_img_3.jpg" + ) + ); + + items.add( + createAuction( + 109, + "Auction With Empty Images and No Bids", + "A plain fallback item that intentionally has all image fields empty.", + "Home", + 2000, + 2000, + null, + "seller-iris", + Constants.STATUS_ACTIVE, + now.minus(Duration.ofHours(3)), + now.plus(Duration.ofHours(3)), + "auction_3_img_1.jpg", + "auction_3_img_2.jpg", + "auction_3_img_3.jpg" + ) + ); + + items.add( + createAuction( + 110, + "Professional Camera Kit", + "Camera body, two lenses, bag, and the kind of mid-length description that looks normal but still needs stable spacing.", + "Electronics", + 9900000, + 10150000, + "studio-pro", + "seller-june", + Constants.STATUS_EXPIRED, + now.minus(Duration.ofDays(5)), + now.minus(Duration.ofHours(10)), + "auction_4_img_1.jpg", + "auction_4_img_2.jpg", + "auction_4_img_3.jpg" + ) + ); + + items.add( + createAuction( + 111, + "Custom Desk Lamp with Warm Brass Finish", + "Small item, ordinary description, no tricks.", + "Home", + 8000, + 0, + null, + "seller-luke", + Constants.STATUS_ACTIVE, + now.minus(Duration.ofHours(1)), + now.plus(Duration.ofHours(18)), + "auction_5_img_1.jpg", + "auction_5_img_2.jpg", + "auction_5_img_3.jpg" + ) + ); + + items.add( + createAuction( + 112, + "CANCELLED Cabinet Prototype", + "This cancelled cabinet listing is another zero-bid fallback to ensure the empty-state UI is never the only path tested.", + "Furniture", + 120000, + 120000, + null, + "seller-mia", + Constants.STATUS_CANCELLED, + now.minus(Duration.ofDays(4)), + now.minus(Duration.ofHours(2)), + "auction_6_img_1.jpg", + "auction_6_img_2.jpg", + "auction_6_img_3.jpg" + ) + ); + + items.add( + createAuction( + 113, + "Luxury Smartwatch with Massive Bid Amount", + "Another high-value item to verify that current bid labels do not overflow or lose separators.", + "Electronics", + 140000000, + 168000000, + "watch-queen", + "seller-nora", + Constants.STATUS_ACTIVE, + now.minus(Duration.ofHours(9)), + now.plus(Duration.ofDays(3)), + "c0a465b1-fc59-4765-b63f-b5d7dcd961c2_1.jpg", + "auction_1_img_1.jpg", + "auction_2_img_1.jpg" + ) + ); + + items.add( + createAuction( + 114, + "Archive Box With No Bids", + "Another zero-bid case for the detail and list views.", + "Office", + 1500, + 1500, + null, + "seller-omar", + "ENDED", + now.minus(Duration.ofDays(2)), + now.minus(Duration.ofHours(1)), + "auction_3_img_1.jpg", + "auction_3_img_2.jpg", + "auction_3_img_3.jpg" + ) + ); + + items.add( + createAuction( + 115, + "Statement Sculpture for Modern Interiors", + "A final mock item with a long enough description to prove text wrapping survives in the gallery and on the detail page.", + "Art", + 560000, + 560000, + null, + "seller-pia", + Constants.STATUS_ACTIVE, + now.minus(Duration.ofHours(12)), + now.plus(Duration.ofDays(1)), + "auction_4_img_1.jpg", + "auction_4_img_2.jpg", + "auction_4_img_3.jpg" + ) + ); + + return items; + } + + private static AuctionItem createAuction( + int id, + String title, + String description, + String category, + long startingPriceCents, + long currentBidCents, + String highestBidder, + String seller, + String status, + Instant startTime, + Instant endTime, + String img1, + String img2, + String img3 + ) { + return createAuction( + id, + title, + description, + category, + startingPriceCents, + currentBidCents, + highestBidder, + seller, + status, + startTime, + endTime, + null, + img1, + img2, + img3 + ); + } + + private static AuctionItem createAuction( + int id, + String title, + String description, + String category, + long startingPriceCents, + long currentBidCents, + String highestBidder, + String seller, + String status, + Instant startTime, + Instant endTime, + String capEndTime, + String img1, + String img2, + String img3 + ) { + AuctionItem item = new AuctionItem(); + item.setId(id); + item.setTitle(title); + item.setDescription(description); + item.setCategory(category); + item.setStartingPriceCents(startingPriceCents); + item.setCurrentBidCents(currentBidCents); + item.setHighestBidderUsername(highestBidder); + item.setSellerUsername(seller); + item.setStartTime(startTime.toString()); + item.setEndTime(endTime.toString()); + item.setCapEndTime( + capEndTime == null + ? endTime + .plus(Duration.ofMinutes(Constants.SNIPE_CAP_DEFAULT_MINUTES)) + .toString() + : capEndTime + ); + item.setStatus(status); + item.setImg1(img1); + item.setImg2(img2); + item.setImg3(img3); + return item; + } +} diff --git a/src/main/java/com/auction/client/util/Toast.java b/src/main/java/com/auction/client/util/Toast.java new file mode 100644 index 0000000..65b8871 --- /dev/null +++ b/src/main/java/com/auction/client/util/Toast.java @@ -0,0 +1,77 @@ +package com.auction.client.util; + +import javafx.animation.PauseTransition; +import javafx.application.Platform; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.Label; +import javafx.scene.layout.StackPane; +import javafx.stage.Popup; +import javafx.stage.Window; +import javafx.util.Duration; + +public final class Toast { + + public enum Type { + INFO, + SUCCESS, + ERROR, + } + + private Toast() {} + + public static void show(Node ownerNode, String message) { + show(ownerNode, message, Type.INFO); + } + + public static void show(Node ownerNode, String message, Type type) { + if (message == null || message.isBlank()) { + return; + } + + Platform.runLater(() -> { + Scene scene = ownerNode == null ? null : ownerNode.getScene(); + Window window = scene == null ? null : scene.getWindow(); + if (window == null) { + return; + } + + Popup popup = new Popup(); + Label label = new Label(message); + label.setWrapText(true); + label.setMaxWidth(320); + label.getStyleClass().addAll("toast", toastStyle(type)); + + StackPane root = new StackPane(label); + root.setPadding(new Insets(12, 14, 12, 14)); + root.setAlignment(Pos.CENTER_LEFT); + root.getStyleClass().add("toast-shell"); + + popup.getContent().add(root); + popup.setAutoFix(true); + popup.setAutoHide(true); + + double x = window.getX() + window.getWidth() - 360; + double y = window.getY() + window.getHeight() - 110; + popup.show( + window, + Math.max(window.getX() + 16, x), + Math.max(window.getY() + 16, y) + ); + + PauseTransition pause = new PauseTransition(Duration.seconds(3)); + pause.setOnFinished(event -> popup.hide()); + pause.play(); + }); + } + + private static String toastStyle(Type type) { + return switch (type) { + case SUCCESS -> "toast-success"; + case ERROR -> "toast-error"; + default -> "toast-info"; + }; + } +} diff --git a/src/main/java/com/auction/server/core/AdminManager.java b/src/main/java/com/auction/server/core/AdminManager.java index fdaff59..17f4903 100644 --- a/src/main/java/com/auction/server/core/AdminManager.java +++ b/src/main/java/com/auction/server/core/AdminManager.java @@ -63,7 +63,7 @@ public void promoteUserToAdmin(String username, SessionContext context) throws A throw new AuctionException("User not found"); } userRepo.promoteUserToAdmin(username); - AsyncLogger.log(LogCategory.SECURITY, EventType.LOGIN, + AsyncLogger.log(LogCategory.SECURITY, EventType.PROMOTE_USER, "Admin=" + context.username() + " PromotedUser=" + username); } @@ -72,7 +72,7 @@ public void demoteUserToStandard(String username, SessionContext context) throws throw new AuctionException("User not found"); } userRepo.demoteUserToStandard(username); - AsyncLogger.log(LogCategory.SECURITY, EventType.LOGIN, + AsyncLogger.log(LogCategory.SECURITY, EventType.DEMOTE_USER, "Admin=" + context.username() + " DemotedUser=" + username); } } diff --git a/src/main/java/com/auction/server/core/AuctionManager.java b/src/main/java/com/auction/server/core/AuctionManager.java index 9f22bc5..311b095 100644 --- a/src/main/java/com/auction/server/core/AuctionManager.java +++ b/src/main/java/com/auction/server/core/AuctionManager.java @@ -1,263 +1,347 @@ package com.auction.server.core; +import com.auction.server.core.logging.AsyncLogger; +import com.auction.server.core.logging.EventType; +import com.auction.server.core.logging.LogCategory; import com.auction.server.repository.AuctionRepository; import com.auction.server.repository.BidRepository; import com.auction.shared.Constants; -import com.auction.shared.exceptions.*; +import com.auction.shared.exceptions.AuctionClosedException; +import com.auction.shared.exceptions.AuctionException; +import com.auction.shared.exceptions.DuplicateBidException; +import com.auction.shared.exceptions.InsufficientBidException; +import com.auction.shared.exceptions.SelfBidException; +import com.auction.shared.exceptions.StaleDataException; import com.auction.shared.models.AuctionItem; import com.auction.shared.models.Bid; -import com.auction.server.core.logging.AsyncLogger; -import com.auction.server.core.logging.LogCategory; -import com.auction.server.core.logging.EventType; - import java.time.Duration; import java.time.Instant; import java.util.List; public class AuctionManager { - private final AuctionRepository auctionRepo; - private final BidRepository bidRepo; - private final LockManager lockManager; - private final TransactionManager txManager; - - public AuctionManager(AuctionRepository auctionRepo, BidRepository bidRepo, - LockManager lockManager, TransactionManager txManager) { - this.auctionRepo = auctionRepo; - this.bidRepo = bidRepo; - this.lockManager = lockManager; - this.txManager = txManager; - } - - public List getActiveAuctions() { - return auctionRepo.findActiveAuctions(); - } - public List findActiveAuctionsBySeller(String sellerUsername) { - return auctionRepo.findAuctionsBySeller(sellerUsername).stream() - .filter(a -> Constants.STATUS_ACTIVE.equals(a.getStatus())) - .toList(); - } - - public AuctionItem getAuctionById(int id) { - return auctionRepo.findAuctionById(id); - } + private final AuctionRepository auctionRepo; + private final BidRepository bidRepo; + private final LockManager lockManager; + private final TransactionManager txManager; + + public AuctionManager( + AuctionRepository auctionRepo, + BidRepository bidRepo, + LockManager lockManager, + TransactionManager txManager + ) { + this.auctionRepo = auctionRepo; + this.bidRepo = bidRepo; + this.lockManager = lockManager; + this.txManager = txManager; + } + + public List getActiveAuctions() { + return auctionRepo.findActiveAuctions(); + } + + public List findActiveAuctionsBySeller(String sellerUsername) { + return auctionRepo + .findAuctionsBySeller(sellerUsername) + .stream() + .filter(a -> Constants.STATUS_ACTIVE.equals(a.getStatus())) + .toList(); + } + + public AuctionItem getAuctionById(int id) { + return auctionRepo.findAuctionById(id); + } + + public List findAuctionsBySeller(String sellerUsername) { + return auctionRepo.findAuctionsBySeller(sellerUsername); + } + + public List getBidHistory(int auctionId) { + return bidRepo.findBidsByAuctionId(auctionId); + } + + public List findBidsByBidder(String bidderUsername) { + return bidRepo.findBidsByBidder(bidderUsername); + } + + public List findWonAuctionsByBidder(String bidderUsername) { + return auctionRepo.findWonAuctionsByBidder(bidderUsername); + } + + public void placeBid( + int auctionId, + SessionContext user, + long amountCents, + long clientExpectedPriceCents + ) throws Exception { + lockManager.lock(auctionId); + try { + txManager.executeWithoutResult(() -> { + AuctionItem item = auctionRepo.findAuctionById(auctionId); + if (item == null) throw new AuctionException("Auction not found"); + + validateActive(item); + validateNotSeller(item, user.username()); + validateNotCurrentWinner(item, user.username()); + validateFreshness(item, clientExpectedPriceCents); + validateMinimumBid(item, amountCents); + validateNotExpired(item); - public List findAuctionsBySeller(String sellerUsername) { - return auctionRepo.findAuctionsBySeller(sellerUsername); - } + Instant now = Instant.now(); + String newEndTime = applySnipeProtection(item, now); + + Bid bid = new Bid(); + bid.setAuctionItemId(auctionId); + bid.setBidderUsername(user.username()); + bid.setAmountCents(amountCents); + bid.setTimestamp(now.toString()); + + bidRepo.insertBid(bid); + auctionRepo.updateAuctionBid(auctionId, amountCents, user.username()); + if (!newEndTime.equals(item.getEndTime())) { + auctionRepo.updateAuctionEndTime(auctionId, newEndTime); + } - public List getBidHistory(int auctionId) { - return bidRepo.findBidsByAuctionId(auctionId); + AsyncLogger.log( + LogCategory.BID, + EventType.PLACE_BID, + "User=" + + user.username() + + " Auction=" + + auctionId + + " Amount=" + + amountCents + ); + }); + } finally { + lockManager.unlock(auctionId); } - - public List findBidsByBidder(String bidderUsername) { - return bidRepo.findBidsByBidder(bidderUsername); + } + + public int createAuction( + AuctionItem item, + SessionContext user, + String[] imagePaths + ) throws Exception { + item.setSellerUsername(user.username()); + item.setStatus(Constants.STATUS_ACTIVE); + if (item.getEndTime() != null) { + Instant endTime = Instant.parse(item.getEndTime()); + Instant capEndTime = endTime.plus( + Duration.ofMinutes(Constants.SNIPE_CAP_DEFAULT_MINUTES) + ); + item.setCapEndTime(capEndTime.toString()); } - - public List findWonAuctionsByBidder(String bidderUsername) { - return auctionRepo.findWonAuctionsByBidder(bidderUsername); + if (imagePaths != null && imagePaths.length == 3) { + item.setImg1(imagePaths[0]); + item.setImg2(imagePaths[1]); + item.setImg3(imagePaths[2]); } - public void placeBid(int auctionId, SessionContext user, long amountCents, long clientExpectedPriceCents) throws Exception { - lockManager.lock(auctionId); - try { - txManager.executeWithoutResult(() -> { - AuctionItem item = auctionRepo.findAuctionById(auctionId); - if (item == null) throw new AuctionException("Auction not found"); - - validateActive(item); - validateNotSeller(item, user.username()); - validateNotCurrentWinner(item, user.username()); - validateFreshness(item, clientExpectedPriceCents); - validateMinimumBid(item, amountCents); - validateNotExpired(item); - - Instant now = Instant.now(); - String newEndTime = applySnipeProtection(item, now); - - Bid bid = new Bid(); - bid.setAuctionItemId(auctionId); - bid.setBidderUsername(user.username()); - bid.setAmountCents(amountCents); - bid.setTimestamp(now.toString()); - - bidRepo.insertBid(bid); - auctionRepo.updateAuctionBid(auctionId, amountCents, user.username()); - if (!newEndTime.equals(item.getEndTime())) { - auctionRepo.updateAuctionEndTime(auctionId, newEndTime); - } - - AsyncLogger.log(LogCategory.BID, EventType.PLACE_BID, - "User=" + user.username() + " Auction=" + auctionId + " Amount=" + amountCents); - }); - } finally { - lockManager.unlock(auctionId); + return txManager.execute(() -> { + int auctionId = auctionRepo.insertAuction(item); + AsyncLogger.log( + LogCategory.AUDIT, + EventType.CREATE_AUCTION, + "User=" + user.username() + " Auction=" + auctionId + ); + return auctionId; + }); + } + + public void cancelAuction(int auctionId, SessionContext user) + throws Exception { + lockManager.lock(auctionId); + try { + txManager.executeWithoutResult(() -> { + AuctionItem item = auctionRepo.findAuctionById(auctionId); + if (item == null) throw new AuctionException("Auction not found"); + + if ( + !item.getSellerUsername().equals(user.username()) && + !Constants.ADMIN.equals(user.role()) + ) { + throw new AuctionException( + "Only the seller or an admin can cancel this auction" + ); } - } - public int createAuction(AuctionItem item, SessionContext user, String[] imagePaths) throws Exception { - item.setSellerUsername(user.username()); - item.setStatus(Constants.STATUS_ACTIVE); - if (item.getEndTime() != null) { - Instant endTime = Instant.parse(item.getEndTime()); - Instant capEndTime = endTime.plus(Duration.ofMinutes(Constants.SNIPE_CAP_DEFAULT_MINUTES)); - item.setCapEndTime(capEndTime.toString()); - } - if (imagePaths != null && imagePaths.length == 3) { - item.setImg1(imagePaths[0]); - item.setImg2(imagePaths[1]); - item.setImg3(imagePaths[2]); + if (bidRepo.countBidsByAuctionId(auctionId) > 0) { + throw new AuctionException("Cannot cancel auction with active bids"); } - return txManager.execute(() -> { - int auctionId = auctionRepo.insertAuction(item); - AsyncLogger.log(LogCategory.AUDIT, EventType.CREATE_AUCTION, - "User=" + user.username() + " Auction=" + auctionId); - return auctionId; - }); + auctionRepo.updateAuctionStatus(auctionId, Constants.STATUS_CANCELLED); + AsyncLogger.log( + LogCategory.AUDIT, + EventType.CANCEL_AUCTION, + "User=" + user.username() + " Auction=" + auctionId + ); + }); + } finally { + lockManager.unlock(auctionId); } - - public void cancelAuction(int auctionId, SessionContext user) throws Exception { - lockManager.lock(auctionId); - try { - txManager.executeWithoutResult(() -> { - AuctionItem item = auctionRepo.findAuctionById(auctionId); - if (item == null) throw new AuctionException("Auction not found"); - - if (!item.getSellerUsername().equals(user.username()) && !Constants.ADMIN.equals(user.role())) { - throw new AuctionException("Only the seller or an admin can cancel this auction"); - } - - if (bidRepo.countBidsByAuctionId(auctionId) > 0) { - throw new AuctionException("Cannot cancel auction with active bids"); - } - - auctionRepo.updateAuctionStatus(auctionId, Constants.STATUS_CANCELLED); - AsyncLogger.log(LogCategory.AUDIT, EventType.CANCEL_AUCTION, - "User=" + user.username() + " Auction=" + auctionId); - }); - } finally { - lockManager.unlock(auctionId); + } + + public int relistAuction( + int auctionId, + String newEndTimeIso, + SessionContext user + ) throws Exception { + lockManager.lock(auctionId); + try { + return txManager.execute(() -> { + AuctionItem parent = auctionRepo.findAuctionById(auctionId); + if (parent == null) throw new AuctionException( + "Parent auction not found" + ); + + if ( + !parent.getSellerUsername().equals(user.username()) && + !Constants.ADMIN.equals(user.role()) + ) { + throw new AuctionException( + "Only the seller or an admin can relist this auction" + ); } - } - public int relistAuction(int auctionId, String newEndTimeIso, SessionContext user) throws Exception { - lockManager.lock(auctionId); - try { - return txManager.execute(() -> { - AuctionItem parent = auctionRepo.findAuctionById(auctionId); - if (parent == null) throw new AuctionException("Parent auction not found"); - - if (!parent.getSellerUsername().equals(user.username()) && !Constants.ADMIN.equals(user.role())) { - throw new AuctionException("Only the seller or an admin can relist this auction"); - } - - if (!Constants.STATUS_EXPIRED.equals(parent.getStatus())) { - throw new AuctionException("Only expired auctions can be relisted"); - } - - if (bidRepo.countBidsByAuctionId(auctionId) > 0) { - throw new AuctionException("Cannot relist an auction that has bids"); - } - - Instant now = Instant.now(); - Instant newEndTime = Instant.parse(newEndTimeIso); - if (!newEndTime.isAfter(now)) { - throw new AuctionException("New end time must be in the future"); - } - - AuctionItem child = new AuctionItem(); - child.setTitle(parent.getTitle()); - child.setDescription(parent.getDescription()); - child.setCategory(parent.getCategory()); - child.setStartingPriceCents(parent.getStartingPriceCents()); - child.setCurrentBidCents(parent.getStartingPriceCents()); - child.setSellerUsername(parent.getSellerUsername()); - child.setStartTime(now.toString()); - child.setEndTime(newEndTimeIso); - child.setCapEndTime(newEndTime.plus(Duration.ofMinutes(Constants.SNIPE_CAP_DEFAULT_MINUTES)).toString()); - child.setStatus(Constants.STATUS_ACTIVE); - child.setImg1(parent.getImg1()); - child.setImg2(parent.getImg2()); - child.setImg3(parent.getImg3()); - child.setRelistedFrom(auctionId); - - int newId = auctionRepo.insertAuction(child); - AsyncLogger.log(LogCategory.AUDIT, EventType.RELIST_AUCTION, - "User=" + user.username() + " OldAuction=" + auctionId + " NewAuction=" + newId); - return newId; - }); - } finally { - lockManager.unlock(auctionId); + if ( + !Constants.STATUS_EXPIRED.equals(parent.getStatus()) && + !Constants.STATUS_CANCELLED.equals(parent.getStatus()) + ) { + throw new AuctionException( + "Only expired or cancelled auctions can be relisted" + ); } - } - private void validateActive(AuctionItem item) throws AuctionClosedException { - if (!Constants.STATUS_ACTIVE.equals(item.getStatus())) { - throw new AuctionClosedException("Auction is closed"); + if (bidRepo.countBidsByAuctionId(auctionId) > 0) { + throw new AuctionException("Cannot relist an auction that has bids"); } - } - private void validateNotSeller(AuctionItem item, String bidder) throws SelfBidException { - if (bidder.equals(item.getSellerUsername())) { - throw new SelfBidException("Cannot bid on your own auction"); + Instant now = Instant.now(); + Instant newEndTime = Instant.parse(newEndTimeIso); + if (!newEndTime.isAfter(now)) { + throw new AuctionException("New end time must be in the future"); } - } - private void validateNotCurrentWinner(AuctionItem item, String bidder) throws DuplicateBidException { - if (bidder.equals(item.getHighestBidderUsername())) { - throw new DuplicateBidException("You are already the highest bidder"); - } + AuctionItem child = new AuctionItem(); + child.setTitle(parent.getTitle()); + child.setDescription(parent.getDescription()); + child.setCategory(parent.getCategory()); + child.setStartingPriceCents(parent.getStartingPriceCents()); + child.setCurrentBidCents(parent.getStartingPriceCents()); + child.setSellerUsername(parent.getSellerUsername()); + child.setStartTime(now.toString()); + child.setEndTime(newEndTimeIso); + child.setCapEndTime( + newEndTime + .plus(Duration.ofMinutes(Constants.SNIPE_CAP_DEFAULT_MINUTES)) + .toString() + ); + child.setStatus(Constants.STATUS_ACTIVE); + child.setImg1(parent.getImg1()); + child.setImg2(parent.getImg2()); + child.setImg3(parent.getImg3()); + child.setRelistedFrom(auctionId); + + int newId = auctionRepo.insertAuction(child); + AsyncLogger.log( + LogCategory.AUDIT, + EventType.RELIST_AUCTION, + "User=" + + user.username() + + " OldAuction=" + + auctionId + + " NewAuction=" + + newId + ); + return newId; + }); + } finally { + lockManager.unlock(auctionId); } + } - private void validateFreshness(AuctionItem item, long expectedCents) throws StaleDataException { - if (expectedCents != item.getCurrentBidCents()) { - throw new StaleDataException("Price has changed. Please refresh and try again."); - } + private void validateActive(AuctionItem item) throws AuctionClosedException { + if (!Constants.STATUS_ACTIVE.equals(item.getStatus())) { + throw new AuctionClosedException("Bidding is closed for this item."); } + } - private void validateMinimumBid(AuctionItem item, long amountCents) throws InsufficientBidException { - if (amountCents <= 0) { - throw new InsufficientBidException("Bid amount must be positive"); - } - if (item.getHighestBidderUsername() == null) { - if (amountCents < item.getStartingPriceCents()) { - throw new InsufficientBidException("Bid must be at least the starting price of " + Constants.formatCents(item.getStartingPriceCents())); - } - } else { - long minBidCents = item.getCurrentBidCents() + (item.getCurrentBidCents() + 19) / 20; - if (amountCents < minBidCents) { - throw new InsufficientBidException("Bid must be at least " + Constants.formatCents(minBidCents) + " (5% increment)"); - } - } + private void validateNotSeller(AuctionItem item, String bidder) + throws SelfBidException { + if (bidder.equals(item.getSellerUsername())) { + throw new SelfBidException("You cannot bid on your own auction."); } + } - private void validateNotExpired(AuctionItem item) throws AuctionClosedException { - Instant now = Instant.now(); - Instant endTime = Instant.parse(item.getEndTime()); - if (now.isAfter(endTime)) { - throw new AuctionClosedException("Auction time has expired"); - } + private void validateNotCurrentWinner(AuctionItem item, String bidder) + throws DuplicateBidException { + if (bidder.equals(item.getHighestBidderUsername())) { + throw new DuplicateBidException("You are already the highest bidder"); + } + } + + private void validateFreshness(AuctionItem item, long expectedCents) + throws StaleDataException { + if (expectedCents != item.getCurrentBidCents()) { + throw new StaleDataException( + "Price has changed. Please refresh and try again." + ); } + } - private String applySnipeProtection(AuctionItem item, Instant now) { - Instant endTime = Instant.parse(item.getEndTime()); - Instant capEndTime; - if (item.getCapEndTime() != null) { - capEndTime = Instant.parse(item.getCapEndTime()); - } else { - capEndTime = endTime.plus(Duration.ofMinutes(Constants.SNIPE_CAP_DEFAULT_MINUTES)); - } + private void validateMinimumBid(AuctionItem item, long amountCents) + throws InsufficientBidException { + if (amountCents <= 0) { + throw new InsufficientBidException("Bid amount must be positive"); + } + if (item.getHighestBidderUsername() == null) { + if (amountCents < item.getStartingPriceCents()) { + throw new InsufficientBidException( + "Bid must be higher than current price." + ); + } + } else { + long minBidCents = + item.getCurrentBidCents() + (item.getCurrentBidCents() + 19) / 20; + if (amountCents < minBidCents) { + throw new InsufficientBidException( + "Bid must be higher than current price." + ); + } + } + } + + private void validateNotExpired(AuctionItem item) + throws AuctionClosedException { + Instant now = Instant.now(); + Instant endTime = Instant.parse(item.getEndTime()); + if (now.isAfter(endTime)) { + throw new AuctionClosedException("Bidding is closed for this item."); + } + } + + private String applySnipeProtection(AuctionItem item, Instant now) { + Instant endTime = Instant.parse(item.getEndTime()); + Instant capEndTime; + if (item.getCapEndTime() != null) { + capEndTime = Instant.parse(item.getCapEndTime()); + } else { + capEndTime = endTime.plus( + Duration.ofMinutes(Constants.SNIPE_CAP_DEFAULT_MINUTES) + ); + } - if (Duration.between(now, endTime).getSeconds() < 30) { - Instant extendedTime = now.plusSeconds(30); - if (extendedTime.isAfter(capEndTime)) { - extendedTime = capEndTime; - } - if (extendedTime.isAfter(endTime)) { - return extendedTime.toString(); - } - } - return item.getEndTime(); + if (Duration.between(now, endTime).getSeconds() <= Constants.SNIPE_PROTECTION_SECONDS) { + Instant extendedTime = now.plusSeconds(30); + if (extendedTime.isAfter(capEndTime)) { + extendedTime = capEndTime; + } + if (extendedTime.isAfter(endTime)) { + return extendedTime.toString(); + } } + return item.getEndTime(); + } } diff --git a/src/main/java/com/auction/server/core/ImageStore.java b/src/main/java/com/auction/server/core/ImageStore.java index fd0fbf1..b975cff 100644 --- a/src/main/java/com/auction/server/core/ImageStore.java +++ b/src/main/java/com/auction/server/core/ImageStore.java @@ -39,8 +39,8 @@ private void ensureDirectoriesExist() { public String[] stageImages(byte[] i1, byte[] i2, byte[] i3) { String baseId = java.util.UUID.randomUUID().toString(); String p1 = saveProcessedToDisk(baseId, 1, i1, true); - String p2 = saveProcessedToDisk(baseId, 2, i2, false); - String p3 = saveProcessedToDisk(baseId, 3, i3, false); + String p2 = saveProcessedToDisk(baseId, 2, i2, true); + String p3 = saveProcessedToDisk(baseId, 3, i3, true); return new String[]{p1, p2, p3}; } @@ -52,10 +52,8 @@ public void deleteStagedImages(String[] paths) { try { Path path = Paths.get(pathStr); Files.deleteIfExists(path); - if (pathStr.contains("_1.jpg")) { - String thumbName = path.getFileName().toString().replace(".jpg", "_thumb.jpg"); - Files.deleteIfExists(Paths.get(Constants.THUMBS_DIR, thumbName)); - } + String thumbName = path.getFileName().toString().replace(".jpg", "_thumb.jpg"); + Files.deleteIfExists(Paths.get(Constants.THUMBS_DIR, thumbName)); } catch (IOException e) { System.err.println("Failed to delete orphaned image: " + pathStr); } @@ -67,10 +65,10 @@ public byte[] loadFullImage(String path) { return readBytes(path, true); } - public byte[] loadThumbnail(String img1Path) { - if (img1Path == null) return PLACEHOLDER_BYTES; + public byte[] loadThumbnail(String imagePath) { + if (imagePath == null) return PLACEHOLDER_BYTES; try { - String thumbName = Paths.get(img1Path).getFileName().toString().replace(".jpg", "_thumb.jpg"); + String thumbName = Paths.get(imagePath).getFileName().toString().replace(".jpg", "_thumb.jpg"); Path path = Paths.get(Constants.THUMBS_DIR, thumbName); return readBytes(path.toString(), false); } catch (Exception e) { diff --git a/src/main/java/com/auction/server/core/SessionManager.java b/src/main/java/com/auction/server/core/SessionManager.java index 99a27d0..9f938d1 100644 --- a/src/main/java/com/auction/server/core/SessionManager.java +++ b/src/main/java/com/auction/server/core/SessionManager.java @@ -55,7 +55,7 @@ public void register(String username, String password, String role) throws Aucti } String hash = SecurityUtil.hashPassword(password); userRepo.insertUser(username, hash, role); - AsyncLogger.log(LogCategory.SECURITY, EventType.CREATE_AUCTION, "New User Registered: " + username + " Role=" + role); + AsyncLogger.log(LogCategory.SECURITY, EventType.USER_REGISTERED, "New User Registered: " + username + " Role=" + role); } public SessionContext validateSession(String token) throws AuctionException { diff --git a/src/main/java/com/auction/server/core/logging/EventType.java b/src/main/java/com/auction/server/core/logging/EventType.java index 1c22a16..7b0b5ff 100644 --- a/src/main/java/com/auction/server/core/logging/EventType.java +++ b/src/main/java/com/auction/server/core/logging/EventType.java @@ -16,5 +16,8 @@ public enum EventType { IMAGE_SAVE_FAILED, TRANSACTION_FAILED, CSV_EXPORT, - DB_BACKUP + DB_BACKUP, + USER_REGISTERED, + PROMOTE_USER, + DEMOTE_USER } diff --git a/src/main/java/com/auction/server/service/AuctionServiceImpl.java b/src/main/java/com/auction/server/service/AuctionServiceImpl.java index b23d532..1200640 100644 --- a/src/main/java/com/auction/server/service/AuctionServiceImpl.java +++ b/src/main/java/com/auction/server/service/AuctionServiceImpl.java @@ -75,6 +75,12 @@ public List getActiveAuctionsBySeller(String sellerUsername, String return auctionManager.findActiveAuctionsBySeller(sellerUsername); } + @Override + public List getAuctionsBySeller(String sellerUsername, String token) throws RemoteException, AuctionException { + sessionManager.validateSession(token); + return auctionManager.findAuctionsBySeller(sellerUsername); + } + @Override public AuctionItem getAuctionById(int auctionId) throws RemoteException { return auctionManager.getAuctionById(auctionId); @@ -160,17 +166,24 @@ public List getMyWonAuctions(String token) throws RemoteException, public byte[] getThumbnail(int auctionId, int imageIndex) throws RemoteException { AuctionItem item = auctionManager.getAuctionById(auctionId); if (item == null) return new byte[0]; - return imageStore.loadThumbnail(item.getImg1()); + String path = resolveImagePath(item, imageIndex); + return imageStore.loadThumbnail(path); + } + + private String resolveImagePath(AuctionItem item, int index) { + return switch (index) { + case 0 -> item.getImg1(); + case 1 -> item.getImg2(); + case 2 -> item.getImg3(); + default -> null; + }; } @Override public byte[] getFullImage(int auctionId, int imageIndex) throws RemoteException { AuctionItem item = auctionManager.getAuctionById(auctionId); if (item == null) return new byte[0]; - String path = null; - if (imageIndex == 1) path = item.getImg1(); - else if (imageIndex == 2) path = item.getImg2(); - else if (imageIndex == 3) path = item.getImg3(); + String path = resolveImagePath(item, imageIndex); return imageStore.loadFullImage(path); } diff --git a/src/main/java/com/auction/server/tools/DatabaseResetUtil.java b/src/main/java/com/auction/server/tools/DatabaseResetUtil.java new file mode 100644 index 0000000..e9b0f0d --- /dev/null +++ b/src/main/java/com/auction/server/tools/DatabaseResetUtil.java @@ -0,0 +1,145 @@ +package com.auction.server.tools; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.time.Instant; + +import com.auction.server.repository.DatabaseManager; +import com.auction.shared.Constants; +import com.auction.server.util.SecurityUtil; + + +/** + * Utility for resetting and seeding the RTDAS database with predictable test data. + * Run this main method to prepare the environment for demonstrations. + */ +public class DatabaseResetUtil { + + public static void main(String[] args) { + System.out.println("[DatabaseResetUtil] Starting database reset and seed..."); + DatabaseManager dbManager = new DatabaseManager(); + try (Connection conn = dbManager.getConnection()) { + System.out.println("[DatabaseResetUtil] URL: " + conn.getMetaData().getURL()); + System.out.println("[DatabaseResetUtil] Resetting..."); + resetDatabase(conn); + System.out.println("[DatabaseResetUtil] Initializing schema..."); + initSchema(conn); + System.out.println("[DatabaseResetUtil] Seeding..."); + seedDatabase(conn); + System.out.println("[DatabaseResetUtil] Success: Database reset and seeded with test data."); + } catch (Exception e) { + System.err.println("[DatabaseResetUtil] FAILED: " + e.getMessage()); + e.printStackTrace(); + } finally { + dbManager.close(); + } + } + + private static void resetDatabase(Connection conn) throws SQLException { + try (var stmt = conn.createStatement()) { + stmt.execute("DROP TABLE IF EXISTS bids"); + stmt.execute("DROP TABLE IF EXISTS auction_items"); + stmt.execute("DROP TABLE IF EXISTS users"); + } + } + + private static void initSchema(Connection conn) throws SQLException { + try (var stmt = conn.createStatement()) { + stmt.execute("CREATE TABLE IF NOT EXISTS users (" + + "username TEXT PRIMARY KEY, " + + "password_hash TEXT NOT NULL, " + + "role TEXT NOT NULL CHECK(role IN ('" + Constants.ADMIN + "','" + Constants.USER + "')), " + + "created_at TEXT NOT NULL" + + ")"); + + stmt.execute("CREATE TABLE IF NOT EXISTS auction_items (" + + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + + "title TEXT NOT NULL, " + + "description TEXT, " + + "category TEXT NOT NULL, " + + "starting_price_cents INTEGER NOT NULL CHECK(starting_price_cents >= 0), " + + "current_bid_cents INTEGER NOT NULL CHECK(current_bid_cents >= 0), " + + "highest_bidder_username TEXT, " + + "seller_username TEXT NOT NULL, " + + "start_time TEXT NOT NULL, " + + "end_time TEXT NOT NULL, " + + "cap_end_time TEXT NOT NULL, " + + "status TEXT NOT NULL CHECK(status IN ('ACTIVE','SOLD','EXPIRED','CANCELLED')), " + + "img1 TEXT, img2 TEXT, img3 TEXT, " + + "relisted_from INTEGER, " + + "FOREIGN KEY (seller_username) REFERENCES users(username), " + + "FOREIGN KEY (relisted_from) REFERENCES auction_items(id)" + + ")"); + + stmt.execute("CREATE TABLE IF NOT EXISTS bids (" + + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + + "auction_item_id INTEGER NOT NULL, " + + "bidder_username TEXT NOT NULL, " + + "amount_cents INTEGER NOT NULL CHECK(amount_cents > 0), " + + "timestamp TEXT NOT NULL, " + + "FOREIGN KEY (auction_item_id) REFERENCES auction_items(id) ON DELETE CASCADE, " + + "FOREIGN KEY (bidder_username) REFERENCES users(username)" + + ")"); + } + } + + private static void seedDatabase(Connection conn) throws SQLException { + String now = Instant.now().toString(); + + // 1. Create Users + try (PreparedStatement pstmt = conn.prepareStatement("INSERT INTO users VALUES (?, ?, ?, ?)")) { + String[][] users = { + {"admin", SecurityUtil.hashPassword("admin"), Constants.ADMIN, now}, + {"bidder", SecurityUtil.hashPassword("password"), Constants.USER, now}, + {"seller", SecurityUtil.hashPassword("password"), Constants.USER, now}, + {"winner", SecurityUtil.hashPassword("password"), Constants.USER, now} + }; + for (String[] user : users) { + pstmt.setString(1, user[0]); + pstmt.setString(2, user[1]); + pstmt.setString(3, user[2]); + pstmt.setString(4, user[3]); + pstmt.executeUpdate(); + } + } + + // 2. Create Auctions + String auctionSql = "INSERT INTO auction_items (title, description, category, starting_price_cents, current_bid_cents, seller_username, start_time, end_time, cap_end_time, status) VALUES (?,?,?,?,?,?,?,?,?,?)"; + try (PreparedStatement pstmt = conn.prepareStatement(auctionSql, java.sql.Statement.RETURN_GENERATED_KEYS)) { + Object[][] auctions = { + {"Vintage Camera", "Classic film camera", "ELECTRONICS", 5000, 5500, "admin", now, "2099-01-01T00:00:00", "2099-01-01T00:00:00", Constants.STATUS_ACTIVE}, + {"Modern Laptop", "Fast machine", "ELECTRONICS", 100000, 105000, "admin", now, "2099-01-01T00:00:00", "2099-01-01T00:00:00", Constants.STATUS_ACTIVE}, + {"Old Clock", "Antique desk clock", "HOME", 2000, 2500, "admin", now, "2000-01-01T00:00:00", "2000-01-01T00:00:00", Constants.STATUS_SOLD}, + {"Empty Vase", "Rare ceramic", "HOME", 1000, 1000, "admin", now, "2000-01-01T00:00:00", "2000-01-01T00:00:00", Constants.STATUS_EXPIRED}, + {"Broken Table", "Wood base", "FURNITURE", 500, 500, "admin", now, "2099-01-01T00:00:00", "2099-01-01T00:00:00", Constants.STATUS_CANCELLED} + }; + + for (Object[] auction : auctions) { + for (int i = 0; i < auction.length; i++) pstmt.setObject(i + 1, auction[i]); + pstmt.executeUpdate(); + + // Add some bids for the first 3 + try (var rs = pstmt.getGeneratedKeys()) { + if (rs.next()) { + int id = rs.getInt(1); + if (id <= 3) addBids(conn, id); + } + } + } + } + } + + private static void addBids(Connection conn, int auctionId) throws SQLException { + try (PreparedStatement pstmt = conn.prepareStatement("INSERT INTO bids (auction_item_id, bidder_username, amount_cents, timestamp) VALUES (?,?,?,?)")) { + String now = Instant.now().toString(); + for (int i = 1; i <= 3; i++) { + pstmt.setInt(1, auctionId); + pstmt.setString(2, "bidder"); + pstmt.setInt(3, 1000 * i); + pstmt.setString(4, now); + pstmt.executeUpdate(); + } + } + } +} diff --git a/src/main/java/com/auction/shared/Constants.java b/src/main/java/com/auction/shared/Constants.java index 778120c..80dc4a8 100644 --- a/src/main/java/com/auction/shared/Constants.java +++ b/src/main/java/com/auction/shared/Constants.java @@ -24,7 +24,7 @@ private Constants() {} public static final double MIN_BID_INCREMENT_PERCENT = 0.05; public static final int SNIPE_PROTECTION_SECONDS = 30; public static final int SNIPE_CAP_DEFAULT_MINUTES = 10; - public static final int REAPER_INTERVAL_SECONDS = 1; + public static final int REAPER_INTERVAL_SECONDS = 5; // --- Polling --- public static final int CLIENT_POLL_INTERVAL_MS = 2000; @@ -52,6 +52,6 @@ private Constants() {} // --- Money Helper --- public static String formatCents(long cents) { - return String.format("$%.2f", cents / 100.0); + return String.format("%,.2f ETB", cents / 100.0); } } diff --git a/src/main/java/com/auction/shared/interfaces/IAuctionService.java b/src/main/java/com/auction/shared/interfaces/IAuctionService.java index c9e7765..004d43d 100644 --- a/src/main/java/com/auction/shared/interfaces/IAuctionService.java +++ b/src/main/java/com/auction/shared/interfaces/IAuctionService.java @@ -35,6 +35,9 @@ public interface IAuctionService extends Remote { List getActiveAuctionsBySeller(String sellerUsername, String token) throws RemoteException, AuctionException; + List getAuctionsBySeller(String sellerUsername, String token) + throws RemoteException, AuctionException; + AuctionItem getAuctionById(int auctionId) throws RemoteException; // --- Bidding --- diff --git a/src/main/resources/css/admin-panel.css b/src/main/resources/css/admin-panel.css index 3886cb3..c7edbb5 100644 --- a/src/main/resources/css/admin-panel.css +++ b/src/main/resources/css/admin-panel.css @@ -377,3 +377,55 @@ .action-promote:hover { -fx-background-color: rgba(63, 185, 80, 0.1); } + +/* Premium header & buttons tweaks */ +.admin-header { + -fx-padding: 20px 28px; + -fx-alignment: center-left; + -fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.55), 28, 0, 0, 10); +} + +.admin-header .primary-button { + -fx-background-color: linear-gradient(to bottom, #2b75f6, #1a5cc7); + -fx-text-fill: white; + -fx-font-weight: 800; + -fx-background-radius: 10px; + -fx-padding: 10px 14px; +} + +.admin-header .nav-button-danger { + -fx-background-color: transparent; + -fx-text-fill: #ff6b6b; + -fx-border-color: transparent; +} + +.admin-content { + -fx-padding: 28px; +} + +/* Auction table visual parity with dashboard */ +.auction-table .column-header-background { + -fx-background-color: linear-gradient(to bottom, #161b22, #0f1318); + -fx-background-radius: 12px 12px 0 0; +} + +.auction-table .column-header .label, +.auction-table .filler .label { + -fx-text-fill: #c9d1d9; + -fx-font-weight: 700; + -fx-font-family: "Inter"; +} + +.auction-table .table-row-cell:filled:hover { + -fx-background-color: rgba(88, 166, 255, 0.06); +} + +.auction-table .table-row-cell:filled:selected { + -fx-background-color: rgba(88, 166, 255, 0.12); +} + +/* Thumbnails */ +.image-thumb { + -fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.45), 8, 0, 0, 2); + -fx-background-radius: 8px; +} diff --git a/src/main/resources/css/style.css b/src/main/resources/css/style.css index 089b089..ba65cdc 100644 --- a/src/main/resources/css/style.css +++ b/src/main/resources/css/style.css @@ -64,6 +64,22 @@ -fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.42), 26, 0, 0, 8); } +.auction-card, +.dialog-surface { + -fx-background-color: rgba(13, 17, 23, 0.96); + -fx-background-radius: 18px; + -fx-border-color: rgba(48, 54, 61, 0.9); + -fx-border-radius: 18px; + -fx-border-width: 1px; + -fx-padding: 16px; + -fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.42), 26, 0, 0, 8); +} + +.auction-card:hover { + -fx-border-color: #58a6ff; + -fx-background-color: rgba(17, 24, 39, 0.98); +} + .panel-card, .hero-card, .toolbar-card { @@ -415,6 +431,38 @@ -fx-padding: 6px 0; } +/* Toast notifications */ +.toast-shell { + -fx-background-color: rgba(13, 17, 23, 0.96); + -fx-background-radius: 12px; + -fx-border-color: rgba(88, 166, 255, 0.22); + -fx-border-radius: 12px; + -fx-border-width: 1px; + -fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.48), 18, 0, 0, 6); +} + +.toast { + -fx-text-fill: #f0f6fc; + -fx-font-size: 13px; + -fx-font-weight: 700; + -fx-padding: 10px 12px; +} + +.toast-info { + -fx-background-color: rgba(88, 166, 255, 0.14); + -fx-border-color: rgba(88, 166, 255, 0.28); +} + +.toast-success { + -fx-background-color: rgba(46, 160, 67, 0.16); + -fx-border-color: rgba(46, 160, 67, 0.28); +} + +.toast-error { + -fx-background-color: rgba(248, 81, 73, 0.16); + -fx-border-color: rgba(248, 81, 73, 0.28); +} + /* Footer Elements */ .footer-box { -fx-alignment: center; @@ -458,6 +506,21 @@ -fx-border-radius: 10px; } +.thumbnail-list { + -fx-background-color: transparent; + -fx-border-color: #30363d; + -fx-border-radius: 12px; +} + +.thumbnail-list .list-cell { + -fx-background-color: #0b0f15; + -fx-padding: 8px; +} + +.thumbnail-list .list-cell:filled:hover { + -fx-background-color: rgba(88, 166, 255, 0.08); +} + .image-placeholder:hover, .image-thumb:hover { -fx-border-color: #58a6ff; @@ -490,7 +553,7 @@ } .logo-box { - -fx-background-color: rgba(2,6,10,0.4); + -fx-background-color: rgba(2, 6, 10, 0.4); -fx-background-radius: 12px; -fx-padding: 18px; } @@ -519,7 +582,7 @@ -fx-min-width: 480px; -fx-padding: 32px; -fx-background-radius: 18px; - -fx-effect: dropshadow(gaussian, rgba(2,8,20,0.7), 46, 0, 0, 16); + -fx-effect: dropshadow(gaussian, rgba(2, 8, 20, 0.7), 46, 0, 0, 16); } /* Logo: larger and stronger glow */ @@ -528,23 +591,28 @@ -fx-icon-color: #82c0ff; } .logo-box { - -fx-background-color: rgba(6,12,20,0.5); + -fx-background-color: rgba(6, 12, 20, 0.5); -fx-background-radius: 16px; - -fx-effect: dropshadow(gaussian, rgba(40,100,180,0.12), 48, 0, 0, 18), dropshadow(gaussian, rgba(0,0,0,0.45), 20, 0, 0, 6); + -fx-effect: + dropshadow(gaussian, rgba(40, 100, 180, 0.12), 48, 0, 0, 18), + dropshadow(gaussian, rgba(0, 0, 0, 0.45), 20, 0, 0, 6); } /* Inputs: subtle inner shadow on focus instead of thick outline */ .input-field { - -fx-background-color: rgba(6,9,12,0.35); + -fx-background-color: rgba(6, 9, 12, 0.35); } -.text-field:focused, .password-field:focused, .input-field:focused-within { - -fx-effect: innershadow(gaussian, rgba(63,142,245,0.14), 12, 0.4, 0, 0); - -fx-border-color: rgba(63,142,245,0.26); +.text-field:focused, +.password-field:focused, +.input-field:focused-within { + -fx-effect: innershadow(gaussian, rgba(63, 142, 245, 0.14), 12, 0.4, 0, 0); + -fx-border-color: rgba(63, 142, 245, 0.26); } /* Make placeholder/prompt text lighter */ -.text-field, .password-field { - -fx-prompt-text-fill: rgba(140,160,180,0.45); +.text-field, +.password-field { + -fx-prompt-text-fill: rgba(140, 160, 180, 0.45); } /* CTA: full-width, bold dark text, prominent gradient and glow on hover */ @@ -559,7 +627,7 @@ } .login-button:hover { -fx-background-color: linear-gradient(to bottom, #9bd3ff 0%, #5aaeff 100%); - -fx-effect: dropshadow(gaussian, rgba(68,140,240,0.28), 20, 0, 0, 8); + -fx-effect: dropshadow(gaussian, rgba(68, 140, 240, 0.28), 20, 0, 0, 8); } /* Footer placement & style */ @@ -602,4 +670,3 @@ -fx-text-fill: #b3d8ff; -fx-underline: true; } - diff --git a/data/schema.sql b/src/main/resources/db/schema.sql similarity index 100% rename from data/schema.sql rename to src/main/resources/db/schema.sql diff --git a/data/seed.sql b/src/main/resources/db/seed.sql similarity index 100% rename from data/seed.sql rename to src/main/resources/db/seed.sql diff --git a/src/main/resources/fxml/admin_panel.fxml b/src/main/resources/fxml/admin_panel.fxml index 35f961a..95e4cf7 100644 --- a/src/main/resources/fxml/admin_panel.fxml +++ b/src/main/resources/fxml/admin_panel.fxml @@ -3,11 +3,23 @@ - + + + + + + + + + + + + - +
diff --git a/src/main/resources/fxml/auction_detail.fxml b/src/main/resources/fxml/auction_detail.fxml index 07e30b3..874a2f0 100644 --- a/src/main/resources/fxml/auction_detail.fxml +++ b/src/main/resources/fxml/auction_detail.fxml @@ -1,116 +1,86 @@ + - + - - - - + - - - + + + + - -
diff --git a/src/main/resources/fxml/create_auction.fxml b/src/main/resources/fxml/create_auction.fxml new file mode 100644 index 0000000..0b638e2 --- /dev/null +++ b/src/main/resources/fxml/create_auction.fxml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + +