Repository: mikeberger/borg_calendar Branch: 2_0_master Commit: 9338a088e2c4 Files: 311 Total size: 3.0 MB Directory structure: gitextract_4n1sqg5n/ ├── .github/ │ └── workflows/ │ ├── codeql.yml │ └── codeql2.yml ├── .gitignore ├── BORGCalendar/ │ ├── common/ │ │ ├── .gitignore │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── net/ │ │ │ └── sf/ │ │ │ └── borg/ │ │ │ └── common/ │ │ │ ├── DateUtil.java │ │ │ ├── EncryptionHelper.java │ │ │ ├── Errmsg.java │ │ │ ├── ErrorHandler.java │ │ │ ├── IOHelper.java │ │ │ ├── LogViewer.java │ │ │ ├── ModalMessage.java │ │ │ ├── ModalMessageServer.java │ │ │ ├── PrefName.java │ │ │ ├── Prefs.java │ │ │ ├── PrintHelper.java │ │ │ ├── Resource.java │ │ │ ├── SendJavaMail.java │ │ │ ├── SocketClient.java │ │ │ ├── SocketServer.java │ │ │ ├── Warning.java │ │ │ └── package.html │ │ └── resources/ │ │ ├── borg_resource.properties │ │ ├── borg_resource_de.properties │ │ ├── borg_resource_es.properties │ │ ├── borg_resource_es_AR.properties │ │ ├── borg_resource_fr.properties │ │ ├── borg_resource_it.properties │ │ ├── borg_resource_nl.properties │ │ ├── borg_resource_nl_BE.properties │ │ ├── borg_resource_pl.properties │ │ ├── borg_resource_pt.properties │ │ ├── borg_resource_ru.properties │ │ ├── borg_resource_zh.properties │ │ └── properties │ ├── install/ │ │ ├── .gitignore │ │ ├── README.txt │ │ ├── build.xml │ │ ├── linpackage.sh │ │ ├── pom.xml │ │ ├── src/ │ │ │ └── main/ │ │ │ └── resources/ │ │ │ ├── licenses/ │ │ │ │ ├── LICENSE.jnlf │ │ │ │ ├── THIRD-PARTY.txt │ │ │ │ ├── apache 2.0 - apache-2.0.html │ │ │ │ ├── bsd 3-clause - license.txt │ │ │ │ ├── bsd new license - bsd-3-clause.html │ │ │ │ ├── cddl - cddl.html │ │ │ │ ├── eclipse distribution license - v 1.0 - edl-v10.html │ │ │ │ ├── eclipse public license 1.0 - epl-v10.html │ │ │ │ ├── epl 1.0 - eclipse-1.0.html │ │ │ │ ├── gnu lesser general public license version 3 - lgpl-3.0.en.html │ │ │ │ ├── ical4j - license - license.txt │ │ │ │ ├── mit license - mit-license.html │ │ │ │ ├── mpl 2.0 - 2.0.html │ │ │ │ ├── new bsd license - bsd-license.html │ │ │ │ ├── the apache license, version 2.0 - license-2.0.txt │ │ │ │ ├── the apache software license, version 2.0 - license-2.0.txt │ │ │ │ ├── the mit license - license.txt │ │ │ │ └── the mit license - mit.html │ │ │ └── run_borg.sh │ │ └── winpackage.bat │ ├── model/ │ │ ├── .gitignore │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── net/ │ │ │ │ └── sf/ │ │ │ │ └── borg/ │ │ │ │ └── model/ │ │ │ │ ├── AddressModel.java │ │ │ │ ├── AppointmentModel.java │ │ │ │ ├── CalendarEntityProvider.java │ │ │ │ ├── CategoryModel.java │ │ │ │ ├── CheckListModel.java │ │ │ │ ├── Day.java │ │ │ │ ├── EmailReminder.java │ │ │ │ ├── ExportImport.java │ │ │ │ ├── LinkModel.java │ │ │ │ ├── MemoModel.java │ │ │ │ ├── Model.java │ │ │ │ ├── OptionModel.java │ │ │ │ ├── ReminderTimes.java │ │ │ │ ├── Repeat.java │ │ │ │ ├── SearchCriteria.java │ │ │ │ ├── Searchable.java │ │ │ │ ├── TaskModel.java │ │ │ │ ├── TaskTypes.java │ │ │ │ ├── Theme.java │ │ │ │ ├── db/ │ │ │ │ │ ├── AppointmentDB.java │ │ │ │ │ ├── CheckListDB.java │ │ │ │ │ ├── DBHelper.java │ │ │ │ │ ├── EntityDB.java │ │ │ │ │ ├── LinkDB.java │ │ │ │ │ ├── MemoDB.java │ │ │ │ │ ├── OptionDB.java │ │ │ │ │ ├── TaskDB.java │ │ │ │ │ ├── jdbc/ │ │ │ │ │ │ ├── AddrJdbcDB.java │ │ │ │ │ │ ├── ApptJdbcDB.java │ │ │ │ │ │ ├── CheckListJdbcDB.java │ │ │ │ │ │ ├── DbDirtyManager.java │ │ │ │ │ │ ├── JdbcBeanDB.java │ │ │ │ │ │ ├── JdbcDB.java │ │ │ │ │ │ ├── JdbcDBHelper.java │ │ │ │ │ │ ├── JdbcDBUpgrader.java │ │ │ │ │ │ ├── LinkJdbcDB.java │ │ │ │ │ │ ├── MemoJdbcDB.java │ │ │ │ │ │ ├── OptionJdbcDB.java │ │ │ │ │ │ ├── TaskJdbcDB.java │ │ │ │ │ │ └── package.html │ │ │ │ │ └── package.html │ │ │ │ ├── entity/ │ │ │ │ │ ├── Address.java │ │ │ │ │ ├── Appointment.java │ │ │ │ │ ├── CalendarEntity.java │ │ │ │ │ ├── CheckList.java │ │ │ │ │ ├── EncryptableEntity.java │ │ │ │ │ ├── KeyedEntity.java │ │ │ │ │ ├── LabelEntity.java │ │ │ │ │ ├── Link.java │ │ │ │ │ ├── Memo.java │ │ │ │ │ ├── Option.java │ │ │ │ │ ├── Project.java │ │ │ │ │ ├── Subtask.java │ │ │ │ │ ├── SyncableEntity.java │ │ │ │ │ ├── Task.java │ │ │ │ │ ├── Tasklog.java │ │ │ │ │ └── package.html │ │ │ │ ├── package.html │ │ │ │ ├── sync/ │ │ │ │ │ ├── RecurrenceRule.java │ │ │ │ │ ├── SubscribedCalendars.java │ │ │ │ │ ├── SyncEvent.java │ │ │ │ │ ├── SyncLog.java │ │ │ │ │ ├── google/ │ │ │ │ │ │ ├── DriveFileManager.java │ │ │ │ │ │ ├── EntityGCalAdapter.java │ │ │ │ │ │ ├── FileDownloader.java │ │ │ │ │ │ ├── GCal.java │ │ │ │ │ │ └── GDrive.java │ │ │ │ │ └── ical/ │ │ │ │ │ ├── AddressVcardAdapter.java │ │ │ │ │ ├── CardDav.java │ │ │ │ │ ├── EntityIcalAdapter.java │ │ │ │ │ └── ICal.java │ │ │ │ └── undo/ │ │ │ │ ├── AddressUndoItem.java │ │ │ │ ├── AppointmentUndoItem.java │ │ │ │ ├── CheckListUndoItem.java │ │ │ │ ├── MemoUndoItem.java │ │ │ │ ├── ProjectUndoItem.java │ │ │ │ ├── SubtaskUndoItem.java │ │ │ │ ├── TaskUndoItem.java │ │ │ │ ├── UndoItem.java │ │ │ │ ├── UndoLog.java │ │ │ │ └── package.html │ │ │ └── resources/ │ │ │ ├── borg_hsqldb.sql │ │ │ ├── borg_sqlite.sql │ │ │ └── task_states.xml │ │ └── test/ │ │ ├── java/ │ │ │ └── net/ │ │ │ └── sf/ │ │ │ └── borg/ │ │ │ └── test/ │ │ │ ├── CalendarQuickstart.java │ │ │ ├── CardDavTest.java │ │ │ ├── CheckListTest.java │ │ │ ├── DBCompare.java │ │ │ ├── DupFix.java │ │ │ ├── EncryptionTest.java │ │ │ ├── ExecuteIcalExportByYear.java │ │ │ ├── GCalTest.java │ │ │ ├── GCalTest2.java │ │ │ ├── GDriveTest.java │ │ │ ├── IcalAdapterTest.java │ │ │ ├── IcalTest.java │ │ │ ├── LinkTest.java │ │ │ └── UndoTest.java │ │ └── resources/ │ │ ├── ap1.ics │ │ ├── test.vcs │ │ └── test2.vcs │ ├── pom.xml │ └── swingui/ │ ├── .gitignore │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── net/ │ │ │ └── sf/ │ │ │ └── borg/ │ │ │ ├── control/ │ │ │ │ ├── Borg.java │ │ │ │ ├── UpgradeCheck.java │ │ │ │ └── package.html │ │ │ └── ui/ │ │ │ ├── CategoryChooser.java │ │ │ ├── ClipBoard.java │ │ │ ├── DockableView.java │ │ │ ├── EntitySelector.java │ │ │ ├── FileView.java │ │ │ ├── HelpLauncher.java │ │ │ ├── InfoView.java │ │ │ ├── MainMenu.java │ │ │ ├── MultiView.java │ │ │ ├── NavPanel.java │ │ │ ├── ResourceHelper.java │ │ │ ├── SearchView.java │ │ │ ├── SqlRunner.java │ │ │ ├── SunTrayIconProxy.java │ │ │ ├── SyncModule.java │ │ │ ├── TrayIconProxy.java │ │ │ ├── UIControl.java │ │ │ ├── UploadModule.java │ │ │ ├── View.java │ │ │ ├── ViewSize.java │ │ │ ├── address/ │ │ │ │ ├── AddrListView.java │ │ │ │ ├── AddressView.java │ │ │ │ └── package.html │ │ │ ├── calendar/ │ │ │ │ ├── AppointmentListView.java │ │ │ │ ├── AppointmentPanel.java │ │ │ │ ├── AppointmentTextFormat.java │ │ │ │ ├── ApptBox.java │ │ │ │ ├── ApptBoxPanel.java │ │ │ │ ├── Box.java │ │ │ │ ├── ButtonBox.java │ │ │ │ ├── DateZone.java │ │ │ │ ├── DayPanel.java │ │ │ │ ├── LabelBox.java │ │ │ │ ├── MonthPanel.java │ │ │ │ ├── MonthPrintPanel.java │ │ │ │ ├── NoteBox.java │ │ │ │ ├── TodoView.java │ │ │ │ ├── WeekPanel.java │ │ │ │ ├── YearPanel.java │ │ │ │ └── package.html │ │ │ ├── checklist/ │ │ │ │ ├── CheckListPanel.java │ │ │ │ └── package.html │ │ │ ├── link/ │ │ │ │ ├── LinkPanel.java │ │ │ │ └── package.html │ │ │ ├── memo/ │ │ │ │ ├── MemoPanel.java │ │ │ │ └── package.html │ │ │ ├── options/ │ │ │ │ ├── AppearanceOptionsPanel.java │ │ │ │ ├── ColorOptionsPanel.java │ │ │ │ ├── DatabaseOptionsPanel.java │ │ │ │ ├── EmailOptionsPanel.java │ │ │ │ ├── EncryptionOptionsPanel.java │ │ │ │ ├── FontOptionsPanel.java │ │ │ │ ├── GoogleOptionsPanel.java │ │ │ │ ├── IcalOptionsPanel.java │ │ │ │ ├── MiscellaneousOptionsPanel.java │ │ │ │ ├── OptionsView.java │ │ │ │ ├── PopupOptionsPanel.java │ │ │ │ ├── StartupViewsOptionsPanel.java │ │ │ │ ├── TaskOptionsPanel.java │ │ │ │ ├── TodoOptionsPanel.java │ │ │ │ └── package.html │ │ │ ├── package.html │ │ │ ├── popup/ │ │ │ │ ├── ApptReminderInstance.java │ │ │ │ ├── BirthdayReminderInstance.java │ │ │ │ ├── PopupOptionsView.java │ │ │ │ ├── ProjectReminderInstance.java │ │ │ │ ├── ReminderInstance.java │ │ │ │ ├── ReminderList.java │ │ │ │ ├── ReminderListManager.java │ │ │ │ ├── ReminderManager.java │ │ │ │ ├── ReminderPopup.java │ │ │ │ ├── ReminderPopupManager.java │ │ │ │ ├── ReminderSound.java │ │ │ │ ├── SubtaskReminderInstance.java │ │ │ │ ├── TaskReminderInstance.java │ │ │ │ └── package.html │ │ │ ├── task/ │ │ │ │ ├── ProjectPanel.java │ │ │ │ ├── ProjectTreePanel.java │ │ │ │ ├── ProjectView.java │ │ │ │ ├── TaskConfigurator.java │ │ │ │ ├── TaskFilterPanel.java │ │ │ │ ├── TaskListPanel.java │ │ │ │ ├── TaskModule.java │ │ │ │ ├── TaskView.java │ │ │ │ └── package.html │ │ │ └── util/ │ │ │ ├── ColorChooserButton.java │ │ │ ├── ColorComboBox.java │ │ │ ├── DateDialog.java │ │ │ ├── DateTimePanel.java │ │ │ ├── DynamicHTMLEditorKit.java │ │ │ ├── FileDrop.java │ │ │ ├── GridBagConstraintsFactory.java │ │ │ ├── HTMLDocumentListener.java │ │ │ ├── HTMLHyperlinkRange.java │ │ │ ├── HTMLLimitDocument.java │ │ │ ├── HTMLLinkController.java │ │ │ ├── HTMLTextPane.java │ │ │ ├── IconHelper.java │ │ │ ├── InputDialog.java │ │ │ ├── JTabbedPaneWithCloseIcons.java │ │ │ ├── LimitDocument.java │ │ │ ├── MyDateChooser.java │ │ │ ├── PasswordHelper.java │ │ │ ├── PlainDateEditor.java │ │ │ ├── PopupMenuHelper.java │ │ │ ├── PwMigration.java │ │ │ ├── ScrolledDialog.java │ │ │ ├── SplashScreen.java │ │ │ ├── TablePrinter.java │ │ │ ├── TableSorter.java │ │ │ ├── UIErrorHandler.java │ │ │ └── package.html │ │ └── resources/ │ │ ├── BorgHelp.hs │ │ ├── JavaHelpSearch/ │ │ │ └── .cvsignore │ │ ├── default/ │ │ │ ├── BorgHelpTOC.xml │ │ │ ├── Map.jhm │ │ │ ├── address.html │ │ │ ├── categories.html │ │ │ ├── db.html │ │ │ ├── editing.html │ │ │ ├── email.html │ │ │ ├── encrypt.html │ │ │ ├── index.html │ │ │ ├── internationalization.html │ │ │ ├── links.html │ │ │ ├── mainscreen.html │ │ │ ├── memo.html │ │ │ ├── options.html │ │ │ ├── popups.html │ │ │ ├── printing.html │ │ │ ├── search.html │ │ │ ├── tasktracker.html │ │ │ ├── todo.html │ │ │ └── xml.html │ │ └── resource/ │ │ ├── CHANGES.txt │ │ ├── COPYING │ │ ├── RELEASE_NOTES.txt │ │ ├── borg.xcf │ │ └── borglicense.txt │ └── test/ │ └── java/ │ └── net/ │ └── sf/ │ └── borg/ │ └── test/ │ └── DumpPw.java ├── LICENSE └── README.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/workflows/codeql.yml ================================================ # For most projects, this workflow file will not need changing; you simply need # to commit it to your repository. # # You may wish to alter this file to override the set of languages analyzed, # or to provide custom queries or build logic. # # ******** NOTE ******** # We have attempted to detect the languages in your repository. Please check # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # name: "CodeQL" on: push: branches: [ "master" ] pull_request: branches: [ "master" ] schedule: - cron: '15 3 * * 1' jobs: analyze: name: Analyze # Runner size impacts CodeQL analysis time. To learn more, please see: # - https://gh.io/recommended-hardware-resources-for-running-codeql # - https://gh.io/supported-runners-and-hardware-resources # - https://gh.io/using-larger-runners # Consider using larger runners for possible analysis time improvements. runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }} permissions: # required for all workflows security-events: write # only required for workflows in private repositories actions: read contents: read strategy: fail-fast: false matrix: language: [ 'java-kotlin' ] # CodeQL supports [ 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' ] # Use only 'java-kotlin' to analyze code written in Java, Kotlin or both # Use only 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup Java JDK uses: actions/setup-java@v4.0.0 with: # The Java version to set up. Takes a whole or semver Java version. See examples of supported syntax in README file java-version: 17 distribution: oracle # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs # queries: security-extended,security-and-quality # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild uses: github/codeql-action/autobuild@v3 # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun # If the Autobuild fails above, remove it and uncomment the following three lines. # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. # - run: | # echo "Run, Build Application using script" # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v3 with: category: "/language:${{matrix.language}}" ================================================ FILE: .github/workflows/codeql2.yml ================================================ # For most projects, this workflow file will not need changing; you simply need # to commit it to your repository. # # You may wish to alter this file to override the set of languages analyzed, # or to provide custom queries or build logic. # # ******** NOTE ******** # We have attempted to detect the languages in your repository. Please check # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # name: "CodeQL Advanced" on: push: branches: [ "2_0_master" ] pull_request: branches: [ "2_0_master" ] schedule: - cron: '35 23 * * 1' jobs: analyze: name: Analyze (${{ matrix.language }}) # Runner size impacts CodeQL analysis time. To learn more, please see: # - https://gh.io/recommended-hardware-resources-for-running-codeql # - https://gh.io/supported-runners-and-hardware-resources # - https://gh.io/using-larger-runners (GitHub.com only) # Consider using larger runners or machines with greater resources for possible analysis time improvements. runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} permissions: # required for all workflows security-events: write # required to fetch internal or private CodeQL packs packages: read # only required for workflows in private repositories actions: read contents: read strategy: fail-fast: false matrix: include: - language: actions build-mode: none - language: java-kotlin build-mode: none # This mode only analyzes Java. Set this to 'autobuild' or 'manual' to analyze Kotlin too. # CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'rust', 'swift' # Use `c-cpp` to analyze code written in C, C++ or both # Use 'java-kotlin' to analyze code written in Java, Kotlin or both # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis, # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning. # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages steps: - name: Checkout repository uses: actions/checkout@v4 # Add any setup steps before running the `github/codeql-action/init` action. # This includes steps like installing compilers or runtimes (`actions/setup-node` # or others). This is typically only required for manual builds. # - name: Setup runtime (example) # uses: actions/setup-example@v1 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v4 with: languages: ${{ matrix.language }} build-mode: ${{ matrix.build-mode }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs # queries: security-extended,security-and-quality # If the analyze step fails for one of the languages you are analyzing with # "We were unable to automatically build your code", modify the matrix above # to set the build mode to "manual" for that language. Then modify this step # to build your code. # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - name: Run manual build steps if: matrix.build-mode == 'manual' shell: bash run: | echo 'If you are using a "manual" build mode for one or more of the' \ 'languages you are analyzing, replace this with the commands to build' \ 'your code, for example:' echo ' make bootstrap' echo ' make release' exit 1 - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v4 with: category: "/language:${{matrix.language}}" ================================================ FILE: .gitignore ================================================ build/ borghelp/ dist/ *.class classes/ target/ bin/ LICENSE.txt /.idea/ *.iml /desktop.ini *.msi /BORGCalendar/.project /BORGCalendar/.settings/org.eclipse.core.resources.prefs /BORGCalendar/.settings/org.eclipse.m2e.core.prefs /BORGCalendar/common/.project /BORGCalendar/common/.settings/org.eclipse.core.resources.prefs /BORGCalendar/common/.settings/org.eclipse.jdt.core.prefs /BORGCalendar/common/.settings/org.eclipse.m2e.core.prefs /BORGCalendar/install/.project /BORGCalendar/install/.settings/org.eclipse.core.resources.prefs /BORGCalendar/install/.settings/org.eclipse.jdt.core.prefs /BORGCalendar/install/.settings/org.eclipse.m2e.core.prefs /BORGCalendar/model/.project /BORGCalendar/model/.settings/org.eclipse.core.resources.prefs /BORGCalendar/model/.settings/org.eclipse.jdt.core.prefs /BORGCalendar/model/.settings/org.eclipse.m2e.core.prefs /BORGCalendar/swingui/.project /BORGCalendar/swingui/.settings/org.eclipse.core.resources.prefs /BORGCalendar/swingui/.settings/org.eclipse.jdt.core.prefs /BORGCalendar/swingui/.settings/org.eclipse.m2e.core.prefs ================================================ FILE: BORGCalendar/common/.gitignore ================================================ /.classpath ================================================ FILE: BORGCalendar/common/pom.xml ================================================ 4.0.0 BORGCalendar BORGCalendar 2.0 common ${maven.build.timestamp} yyyy-MM-dd HH:mm javax.mail mail 1.5.0-b01 src/main/resources **/* true org.codehaus.mojo buildnumber-maven-plugin 1.4 initialize create {0, date, yyyy-MM-dd HH:mm:ss} no-git-found false false https://github.com/mikeberger/borg_calendar.git scm:git:https://github.com/mikeberger/borg_calendar.git ================================================ FILE: BORGCalendar/common/src/main/java/net/sf/borg/common/DateUtil.java ================================================ /* * This file is part of BORG. * * BORG 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. * * BORG 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 * BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, * Suite 330, Boston, MA 02111-1307 USA * * Copyright 2003 by Mike Berger */ package net.sf.borg.common; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; /** * Some common date utility logic */ public class DateUtil { /** * Checks if one date falls on a later calendar day than another. * * @param d1 * the first date * @param d2 * the second date * * @return true, if is after */ public static boolean isAfter(Date d1, Date d2) { GregorianCalendar tcal = new GregorianCalendar(); tcal.setTime(d1); tcal.set(Calendar.HOUR_OF_DAY, 0); tcal.set(Calendar.MINUTE, 0); tcal.set(Calendar.SECOND, 0); GregorianCalendar dcal = new GregorianCalendar(); dcal.setTime(d2); dcal.set(Calendar.HOUR_OF_DAY, 0); dcal.set(Calendar.MINUTE, 10); dcal.set(Calendar.SECOND, 0); return tcal.getTime().after(dcal.getTime()); } /** * set a date to midnight * @param d - the date */ static public Date setToMidnight(Date d) { GregorianCalendar cal = new GregorianCalendar(); cal.setTime(d); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); return cal.getTime(); } /** * return the number of the day of the epoch for a given date. this provides * a decent Date to int converter that returns the same value for all Dates * on a given day. * * @param d * the date * * @return the days from the beginning of the epoch until d */ static public int dayOfEpoch(Date d) { // adjust to local time GregorianCalendar cal = new GregorianCalendar(); cal.setTime(d); cal.set(Calendar.HOUR_OF_DAY, 11); return (int) (cal.getTime().getTime() / 1000 / 60 / 60 / 24); } /** * generate a human readable string for a particular number of minutes * * @param mins - the number of minutes * * @return the string */ public static String minuteString(int mins) { int hours = mins / 60; int minsPast = mins % 60; String minutesString; String hoursString; if (hours > 1) { hoursString = hours + " " + Resource.getResourceString("Hours"); } else if (hours > 0) { hoursString = hours + " " + Resource.getResourceString("Hour"); } else { hoursString = ""; } if (minsPast > 1) { minutesString = minsPast + " " + Resource.getResourceString("Minutes"); } else if (minsPast > 0) { minutesString = minsPast + " " + Resource.getResourceString("Minute"); } else if (hours >= 1) { minutesString = ""; } else { minutesString = minsPast + " " + Resource.getResourceString("Minutes"); } // space between hours and minutes if (!hoursString.equals("") && !minutesString.equals("")) minutesString = " " + minutesString; return hoursString + minutesString; } /** * return the number of days left before a given date. * * @param dd the date * @return the number of days left */ public static int daysLeft(Date dd) { if (dd == null) return 0; Calendar today = new GregorianCalendar(); Calendar dcal = new GregorianCalendar(); dcal.setTime(dd); // find days left int days = 0; if (dcal.get(Calendar.YEAR) == today.get(Calendar.YEAR)) { days = dcal.get(Calendar.DAY_OF_YEAR) - today.get(Calendar.DAY_OF_YEAR); } else { days = Long.valueOf((dd.getTime() - today.getTime().getTime()) / (1000 * 60 * 60 * 24)).intValue(); } // if due date is past, set days left to 0 // negative days are silly if (days < 0) days = 0; return days; } /** * determine the number fo days between two dates * * @param start the first date * @param dd the later date * @return the int */ public static int daysBetween(Date start, Date dd) { if (dd == null) return 0; Calendar startcal = new GregorianCalendar(); Calendar dcal = new GregorianCalendar(); dcal.setTime(dd); startcal.setTime(start); // find days left int days = 0; if (dcal.get(Calendar.YEAR) == startcal.get(Calendar.YEAR)) { days = dcal.get(Calendar.DAY_OF_YEAR) - startcal.get(Calendar.DAY_OF_YEAR); } else { days = Long.valueOf((dd.getTime() - startcal.getTime().getTime()) / (1000 * 60 * 60 * 24)).intValue(); } // if due date is past, set days left to 0 // negative days are silly if (days < 0) days = 0; return days; } } ================================================ FILE: BORGCalendar/common/src/main/java/net/sf/borg/common/EncryptionHelper.java ================================================ package net.sf.borg.common; import javax.crypto.Cipher; import javax.crypto.CipherOutputStream; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.io.*; import java.security.Key; import java.security.KeyStore; import java.util.Base64; /** * class containing encryption and decryption methods for borg * */ public class EncryptionHelper { static final String borg_key_alias = "borg_key"; /* the cached keystore object */ private final KeyStore keyStore; /* cached password */ private final String password; /** * create a new JCEKS Key Store * @param location - location (file) for the key store * @param password - key store password * @throws Exception */ static public void createStore(String location, String password) throws Exception { KeyStore store = KeyStore.getInstance("JCEKS"); store.load(null, password.toCharArray()); FileOutputStream fos = new FileOutputStream(location); store.store(fos, password.toCharArray()); fos.close(); } static public void createDefaultStore(String location, String password) throws Exception { createStore(location, password); generateKey(location,password,borg_key_alias); } /** * generate a new encryption key in the key store. the key store password will * be used as the key password. * @param location - key store location * @param password - key store password * @param name - key alias * @throws Exception */ static public void generateKey(String location, String password, String name) throws Exception { KeyStore store = KeyStore.getInstance("JCEKS"); FileInputStream fis = new FileInputStream(location); store.load(fis, password.toCharArray()); fis.close(); KeyGenerator keyGen = KeyGenerator.getInstance("AES"); SecretKey key = keyGen.generateKey(); KeyStore.SecretKeyEntry skEntry = new KeyStore.SecretKeyEntry(key); store.setEntry(name, skEntry, new KeyStore.PasswordProtection(password.toCharArray())); FileOutputStream fos = new FileOutputStream(location); store.store(fos, password.toCharArray()); fos.close(); } public EncryptionHelper(String keyStorePassword) throws Exception { this(Prefs.getPref(PrefName.KEYSTORE), keyStorePassword); } /** * constructor - loads a KeyStore from a file * @param keyStoreLocation - key store location * @param keyStorePassword - key store password * @throws Exception */ public EncryptionHelper(String keyStoreLocation, String keyStorePassword) throws Exception { this.password = keyStorePassword; if( keyStoreLocation == null || keyStoreLocation.equals("")) throw new Warning(Resource.getResourceString("Key_Store_Not_Set")); File f = new File(keyStoreLocation); if( !f.canRead()) { throw new Warning(Resource.getResourceString("No_Key_Store") + keyStoreLocation); } this.keyStore = KeyStore.getInstance("JCEKS"); FileInputStream fis = new FileInputStream(keyStoreLocation); this.keyStore.load(fis, this.password .toCharArray()); fis.close(); } public String encrypt(String clearText) throws Exception { return encrypt(clearText,borg_key_alias); } /** * encrypt a String using a key from the key store * @param clearText - the string to encrypt * @param keyAlias - the encryption key alias * @return the encrypted string * @throws Exception */ public String encrypt(String clearText, String keyAlias) throws Exception { /* * get the key and create the Cipher */ Key key = this.keyStore.getKey(keyAlias, this.password.toCharArray()); Cipher enc = Cipher.getInstance("AES"); enc.init(Cipher.ENCRYPT_MODE, key); /* * encrypt the clear text */ ByteArrayOutputStream baos = new ByteArrayOutputStream(); OutputStream os = new CipherOutputStream(baos, enc); os.write(clearText.getBytes()); os.close(); /* * get the encrypted bytes and encode to a string */ byte[] ba = baos.toByteArray(); return new String(Base64.getEncoder().encode(ba)); } public String decrypt(String clearText) throws Exception { return decrypt(clearText,borg_key_alias); } /** * decrypt a String using a key from the key store * @param cipherText - the string to decrypt * @param keyAlias - the decryption key alias * @return the encrypted string * @throws Exception */ public String decrypt(String cipherText, String keyAlias) throws Exception { /* * get the key and create the Cipher */ Key key = this.keyStore.getKey(keyAlias, this.password.toCharArray()); Cipher dec = Cipher.getInstance("AES"); dec.init(Cipher.DECRYPT_MODE, key); /* * decode the cipher text from base64 back to a byte array */ byte[] decba = Base64.getDecoder().decode(cipherText); /* * decrpyt the bytes */ ByteArrayOutputStream baos = new ByteArrayOutputStream(); OutputStream os = new CipherOutputStream(baos, dec); os.write(decba); os.close(); return baos.toString(); } /** * Export the borg key in text form * @param keyAlias the key alias * @param keyStorePassword the keystore password * @return the exproted key as a string * @throws Exception */ public String exportKey(String keyAlias, String keyStorePassword) throws Exception { Key key = this.keyStore.getKey(keyAlias, keyStorePassword.toCharArray()); return new String(Base64.getEncoder().encode(key.getEncoded())); } /** * Import a provided key into a KeyStore * @param location - the keystore location * @param encodedKey - the encoded key to import * @param keyAlias - the key alias * @param password - the key store password * @throws Exception */ static public void importKey(String location, String encodedKey, String keyAlias, String password) throws Exception { KeyStore store = KeyStore.getInstance("JCEKS"); FileInputStream fis = new FileInputStream(location); store.load(fis, password.toCharArray()); fis.close(); byte[] ba = Base64.getDecoder().decode(encodedKey); SecretKey key = new SecretKeySpec(ba,"AES"); KeyStore.SecretKeyEntry skEntry = new KeyStore.SecretKeyEntry(key); store.setEntry(keyAlias, skEntry, new KeyStore.PasswordProtection(password.toCharArray())); FileOutputStream fos = new FileOutputStream(location); store.store(fos, password.toCharArray()); fos.close(); } } ================================================ FILE: BORGCalendar/common/src/main/java/net/sf/borg/common/Errmsg.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2003 by Mike Berger */ package net.sf.borg.common; import java.util.logging.Logger; /** * standard error handling for Borg */ public class Errmsg { static private final Logger log = Logger.getLogger("net.sf.borg"); /** * console error handler * */ private static class DefaultErrorHandler implements ErrorHandler { @Override public void errmsg(Exception e) { // treat a warning differently - just show its text if (e instanceof Warning) { notice(e.getMessage()); return; } log.severe(e.toString()); e.printStackTrace(); } @Override public void notice(String s) { log.info(s); return; } } // initialize to only send errors to the console private static ErrorHandler errorHandler = new DefaultErrorHandler(); public static ErrorHandler getErrorHandler() { return errorHandler; } public static void setErrorHandler(ErrorHandler errorHandler) { Errmsg.errorHandler = errorHandler; } public static void logError(Exception e) { log.severe(e.toString()); e.printStackTrace(); } } ================================================ FILE: BORGCalendar/common/src/main/java/net/sf/borg/common/ErrorHandler.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2003 by Mike Berger */ package net.sf.borg.common; /** * error handler interface */ public interface ErrorHandler { /** * Output an exception to the user. * * @param e * the e */ void errmsg(Exception e); /** * output a notice/warning - just shows text * * @param s * the text to show */ void notice(String s); } ================================================ FILE: BORGCalendar/common/src/main/java/net/sf/borg/common/IOHelper.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2004 by Mohan Embar - http://www.thisiscool.com/ */ package net.sf.borg.common; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.util.logging.Logger; /** * standard routines for file I/O with prompting */ public class IOHelper { static final Logger log = Logger.getLogger("net.sf.borg"); /** * The home directory; gets updated to ensure it is the last used directory, * initialized as default */ static private File homeDirectory = new File("."); /** * Gets the home directory * * @return the directory */ public static File getHomeDirectory() { return (homeDirectory); } /** * Sets the home directory. */ public static void setHomeDirectory(String newHome) { homeDirectory = new File(newHome); } /** * create an output stream to a file, creating parent dirs as needed * * @param file * the file * * @return the output stream * * @throws Exception * the exception */ public static OutputStream createOutputStream(String file) throws Exception { File fil = new File(file); fil.getParentFile().mkdirs(); // create the containing directory if it doesn't // already exist. return new FileOutputStream(fil); } } ================================================ FILE: BORGCalendar/common/src/main/java/net/sf/borg/common/LogViewer.java ================================================ /* * written by google gemini */ package net.sf.borg.common; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.util.List; public class LogViewer extends JFrame { private static final long serialVersionUID = -6270066756808515613L; private class LogRowRenderer extends DefaultTableCellRenderer { private static final long serialVersionUID = -3073125084127463837L; @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); // Get the log type from the first column (index 0) String type = table.getValueAt(row, 0).toString(); if (isSelected) { c.setBackground(table.getSelectionBackground()); c.setForeground(table.getSelectionForeground()); } else { // Apply colors based on type switch (type) { case "ERROR" -> { c.setBackground(new Color(255, 210, 210)); // Soft Red c.setForeground(Color.RED.darker()); } case "UPDATE" -> { c.setBackground(new Color(210, 255, 210)); // Soft Green c.setForeground(Color.GREEN.darker()); } case "WARN" -> { c.setBackground(new Color(255, 245, 200)); // Soft Yellow c.setForeground(new Color(150, 100, 0)); // Dark Orange/Brown } case "INFO" -> { c.setBackground(Color.WHITE); c.setForeground(Color.BLACK); } default -> { c.setBackground(Color.WHITE); c.setForeground(Color.BLACK); } } } return c; } } public static class LogEntry { public final static String INFO = "INFO"; public final static String UPDATE = "UPDATE"; public final static String WARN = "WARN"; public final static String ERROR = "ERROR"; private String type; // INFO, WARN, ERROR private String message; public LogEntry(String type, String message) { this.type = type; this.message = message; } public String getType() { return type; } public String getMessage() { return message; } } public LogViewer(List logs) { setTitle("Log Viewer"); setSize(600, 400); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); //setLocationRelativeTo(null); // 1. Define Table Columns String[] columnNames = {"Type", "Description (Click for details)"}; // 2. Load data into the Table Model DefaultTableModel model = new DefaultTableModel(columnNames, 0) { private static final long serialVersionUID = 1L; @Override public boolean isCellEditable(int row, int column) { return false; // Make table read-only } }; for (LogEntry log : logs) { model.addRow(new Object[]{log.getType(), log.getMessage()}); } // 3. Setup JTable and JScrollPane JTable table = new JTable(model); LogRowRenderer renderer = new LogRowRenderer(); for (int i = 0; i < table.getColumnCount(); i++) { table.getColumnModel().getColumn(i).setCellRenderer(renderer); } table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); JScrollPane scrollPane = new JScrollPane(table); add(scrollPane, BorderLayout.CENTER); // 4. Add Selection Listener for the Detail Window table.getSelectionModel().addListSelectionListener(e -> { if (!e.getValueIsAdjusting()) { // Ensure event only fires once int selectedRow = table.getSelectedRow(); if (selectedRow != -1) { showDetailWindow(logs.get(selectedRow)); } } }); } private void showDetailWindow(LogEntry log) { JFrame detailFrame = new JFrame("Log Detail: " + log.getType()); detailFrame.setSize(400, 300); JTextArea textArea = new JTextArea(log.getMessage()); textArea.setLineWrap(true); textArea.setWrapStyleWord(true); textArea.setEditable(false); textArea.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); detailFrame.add(new JScrollPane(textArea)); detailFrame.setVisible(true); //detailFrame.setLocationRelativeTo(this); } public static void main(String[] args) { // Sample Data List sampleLogs = List.of( new LogEntry("INFO", "System started successfully at 09:00 AM."), new LogEntry("WARN", "Memory usage exceeding 80% threshold."), new LogEntry("ERROR", "NullPointerException in DatabaseConnector.java:42. Connection failed."), new LogEntry("UPDATE", "User 'Admin' logged in from IP 192.168.1.1.") ); SwingUtilities.invokeLater(() -> { new LogViewer(sampleLogs).setVisible(true); }); } } ================================================ FILE: BORGCalendar/common/src/main/java/net/sf/borg/common/ModalMessage.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2003 by Mike Berger */ package net.sf.borg.common; import javax.swing.*; import java.awt.*; /** * modal dialog with a scrollable message. * The ok button can start as disabled so that the user must wait until it is enabled * by the program while the program is doing something important */ public class ModalMessage extends JDialog { private static final long serialVersionUID = 1L; /** The message scroll. */ private JScrollPane messageScroll = null; /** The message text. */ private JTextArea messageText = null; /** The ok button. */ private JButton okButton = null; /** * Instantiates a new modal message. * * @param s the message * @param enabled if true, enable ok button, otheriwse disable */ public ModalMessage(String s, boolean enabled) { initComponents(); messageText.setText(s); okButton.setEnabled(enabled); setModal(true); } /** * Append text to the message while. Normally used when the program is continuing to produce output * for the user and the ok button is disabled. Text is appended on a new line. * * @param s the string to append */ public void appendText(String s) { String t = messageText.getText(); t += "\n" + s; messageText.setText(t); } /** * Inits the components. */ private void initComponents() { setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); setTitle("BORG"); this.setSize(165, 300); JPanel topPanel = new JPanel(); topPanel.setLayout(new GridBagLayout()); messageScroll = new JScrollPane(); messageScroll.setPreferredSize(new java.awt.Dimension(600, 200)); messageText = new JTextArea(); messageText.setEditable(false); messageText.setLineWrap(true); messageScroll.setViewportView(messageText); GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.insets = new Insets(4, 4, 4, 4); gbc.weightx = 1.0; gbc.weighty = 1.0; gbc.fill = GridBagConstraints.BOTH; topPanel.add(messageScroll, gbc); JPanel buttonPanel = new JPanel(); okButton = new JButton(); okButton.setText(Resource.getResourceString("OK")); okButton.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { dispose(); } }); buttonPanel.add(okButton, null); GridBagConstraints gbc2 = new GridBagConstraints(); gbc2.gridx = 0; gbc2.gridy = 1; gbc2.insets = new Insets(4, 4, 4, 4); gbc2.weightx = 0.0; gbc2.weighty = 0.0; gbc2.fill = GridBagConstraints.BOTH; topPanel.add(buttonPanel, gbc2); this.setContentPane(topPanel); pack(); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension labelSize = messageScroll.getPreferredSize(); setLocation(screenSize.width / 2 - (labelSize.width / 2), screenSize.height / 2 - (labelSize.height / 2)); } /* (non-Javadoc) * @see java.awt.Component#setEnabled(boolean) */ @Override public void setEnabled(boolean e) { okButton.setEnabled(e); } /** * Sets the text. * * @param s the new text */ public void setText(String s) { messageText.setText(s); } } ================================================ FILE: BORGCalendar/common/src/main/java/net/sf/borg/common/ModalMessageServer.java ================================================ package net.sf.borg.common; import javax.swing.*; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; public class ModalMessageServer { static volatile private ModalMessageServer singleton = null; static public ModalMessageServer getReference() { if (singleton == null) { ModalMessageServer b = new ModalMessageServer(); singleton = b; } return (singleton); } private ModalMessage modalMessage = null; private BlockingQueue messageQ = new LinkedBlockingQueue<>(); private ModalMessageServer(){ Thread t = new Thread(){ @Override public void run() { try { while (true) { String msg = messageQ.take(); if (msg.startsWith("lock:")) { final String lockmsg = msg.substring(5); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { if (modalMessage == null || !modalMessage.isShowing()) { modalMessage = new ModalMessage(lockmsg, false); modalMessage.setVisible(true); } else { modalMessage.appendText(lockmsg); } modalMessage.setEnabled(false); modalMessage.toFront(); } }); } else if (msg.startsWith("log:")) { final String lockmsg = msg.substring(4); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { if (modalMessage != null && modalMessage.isShowing()) { modalMessage.appendText(lockmsg); // modalMessage.setEnabled(false); // modalMessage.toFront(); } } }); } else if (msg.equals("unlock")) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { if (modalMessage.isShowing()) { modalMessage.setEnabled(true); } } }); } } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }; t.start(); } public void sendMessage(String msg){ messageQ.add(msg); } public void sendLogMessage(String msg) { sendMessage("log:" + msg); } } ================================================ FILE: BORGCalendar/common/src/main/java/net/sf/borg/common/PrefName.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2003 by Mike Berger */ package net.sf.borg.common; import java.util.Calendar; /** * PrefName contains all of the Borg preference definitions and default values. * It enforces compile time checking of preference names */ public class PrefName { /** preference name */ private String name_; /** default value */ private Object default_; /** * Instantiates a new pref name. * * @param name * the name * @param def * the default value */ public PrefName(String name, Object def) { setName(name); setDefault(def); } /** * Sets the name. * * @param name_ * the new name */ void setName(String name_) { this.name_ = name_; } /** * Gets the name. * * @return the name */ public String getName() { return name_; } /** * Sets the default value * * @param default_ * the new default */ void setDefault(Object default_) { this.default_ = default_; } /** * Gets the default value * * @return the default */ public Object getDefault() { return default_; } // database related prefs /** database type. */ static public PrefName DBTYPE = new PrefName("dbtype", "h2"); static public PrefName JDBCURL = new PrefName("jdbcurl", ""); /** h2 database directory */ static public PrefName H2DIR = new PrefName("h2dir", "not-set"); static public PrefName SQLITEDIR = new PrefName("sqlitedir", "not-set"); // misc /** show a stack trace button on error dialogs */ static public PrefName STACKTRACE = new PrefName("stacktrace", "false"); /** show the spash window */ static public PrefName SPLASH = new PrefName("splash", "true"); /** port for the socket listener */ static public PrefName SOCKETPORT = new PrefName("socketport", Integer.valueOf(2929)); /** start as iconified to system tray */ static public PrefName BACKGSTART = new PrefName("backgstart", "false"); /** use system tray */ static public PrefName USESYSTRAY = new PrefName("useSysTray", "true"); /** show date is system tray */ static public PrefName SYSTRAYDATE = new PrefName("sysTrayDate", "true"); /** backup directory for auto backup */ static public PrefName BACKUPDIR = new PrefName("backupDir", ""); /** print in color */ static public PrefName COLORPRINT = new PrefName("colorprint", "false"); /** show public appointments */ //static public PrefName SHOWPUBLIC = new PrefName("showpublic", "true"); /** show private appointments */ static public PrefName SHOWPRIVATE = new PrefName("showprivate", "false"); /** show us holidays */ static public PrefName SHOWUSHOLIDAYS = new PrefName("show_us_holidays", "true"); /** show canadian holidays */ static public PrefName SHOWCANHOLIDAYS = new PrefName("show_can_holidays", "false"); /** sort appointments by priority for a day */ static public PrefName PRIORITY_SORT = new PrefName("priority_sort", "false"); /** the first day of the week */ static public PrefName FIRSTDOW = new PrefName("first_dow", Integer.valueOf(Calendar.SUNDAY)); /** show military time */ static public PrefName MILTIME = new PrefName("miltime", "false"); /** earliest hour in week grid */ static public PrefName WKSTARTHOUR = new PrefName("wkStartHour", "7"); /** latest hour in week grid */ static public PrefName WKENDHOUR = new PrefName("wkEndHour", "22"); /** contents of the default appointment in XML */ static public PrefName DEFAULT_APPT = new PrefName("defaultAppt", ""); /** show the day of the year */ static public PrefName DAYOFYEAR = new PrefName("showDayOfYear", "false"); /** truncate appointment text after 1 line */ static public PrefName TRUNCAPPT = new PrefName("truncate_appt", "true"); /** use iso week numbering */ static public PrefName ISOWKNUMBER = new PrefName("isowknumber", "true"); /** do not show strikethrough appointments */ static public PrefName HIDESTRIKETHROUGH = new PrefName("hide_strike", "false"); /** show the entire undo stack (debugging) */ static public PrefName SHOW_UNDO_STACK = new PrefName("show_undo_stack", "false"); static public PrefName REMINDERS = new PrefName("reminders", "true"); static public PrefName BEEPINGREMINDERS = new PrefName("beeping_reminders", "true"); /** how often tp pop up reminders for untimed todos */ static public PrefName TODOREMINDERMINS = new PrefName("todo_reminder_mins", Integer.valueOf(30)); /** option to consolidate all reminders in a single list window */ static public PrefName REMINDERLIST = new PrefName("reminder_list", "true"); /** show reminders for tasks */ static public PrefName TASKREMINDERS = new PrefName("task_reminders", "true"); /** days before a birthday to show birthday reminders */ static public PrefName BIRTHDAYREMINDERDAYS = new PrefName("bd_reminder_days", Integer.valueOf(7)); //static public PrefName TASKBAR_REMINDERS = new PrefName("taskbar_reminders", "false"); static public PrefName EMAILENABLED = new PrefName("email_enabled", "false"); public static PrefName DAILYEMAILENABLED = new PrefName("daily_email_enabled", "true");; static public PrefName EMAILSERVER = new PrefName("email_server", ""); static public PrefName EMAILADDR = new PrefName("email_addr", ""); static public PrefName EMAILFROM = new PrefName("email_from", ""); static public PrefName EMAILLAST = new PrefName("email_last", Integer.valueOf(0)); static public PrefName EMAILDEBUG = new PrefName("email_debug", "0"); static public PrefName EMAILTIME = new PrefName("email_time", Integer.valueOf(0)); static public PrefName EMAILUSER = new PrefName("email_user", ""); static public PrefName EMAILPASS = new PrefName("email_pass", ""); static public PrefName EMAILPORT = new PrefName("email_port", "25"); static public PrefName ENABLETLS = new PrefName("enable_tls", "false"); static public PrefName REMMINS = new PrefName("remmins", "-10,-5,0,1,2,3,4,5,10,15,20,30,45,60,90,120,180,240,300,360"); static public PrefName DEFFONT = new PrefName("defaultfont", ""); static public PrefName APPTFONT = new PrefName("apptfont", "SansSerif-10"); static public PrefName DAYVIEWFONT = new PrefName("dayviewfont", "SansSerif-10"); static public PrefName WEEKVIEWFONT = new PrefName("weekviewfont", "SansSerif-10"); static public PrefName PRINTFONT = new PrefName("monthviewfont", "SansSerif-6"); static public PrefName YEARVIEWFONT = new PrefName("yearviewfont", "SansSerif-7"); static public PrefName TRAYFONT = new PrefName("trayfont", "SansSerif-BOLD-12"); static public PrefName ICONSIZE = new PrefName("icon_size", Integer.valueOf(16)); static public PrefName LNF = new PrefName("lnf", "com.formdev.flatlaf.FlatLightLaf"); static public PrefName COUNTRY = new PrefName("country", ""); static public PrefName LANGUAGE = new PrefName("language", ""); /** use user colors on todo view */ static public PrefName UCS_ONTODO = new PrefName("ucs_ontodo", "false"); /** mark todos on the calendar */ static public PrefName UCS_MARKTODO = new PrefName("ucs_marktodo", "true"); /** characters or image to mark todos with */ static public PrefName UCS_MARKER = new PrefName("ucs_marker", "redball.gif"); /** draw gradient color in appointment boxes - can slow down older machines */ static public PrefName GRADIENT_APPTS = new PrefName("gradient_appts", "true"); /** when showing tasks project and subtasks, prepend a prefix and id number */ static public PrefName TASK_SHOW_ABBREV = new PrefName("task_show_abbrev", "false"); /** show tasks on calendar */ static public PrefName CAL_SHOW_TASKS = new PrefName("cal_show_tasks", "true"); /** show subtasks on calendar */ static public PrefName CAL_SHOW_SUBTASKS = new PrefName("cal_show_subtasks", "true"); /** show task number and status in task tree */ static public PrefName TASK_TREE_SHOW_STATUS = new PrefName("task_tree_show_status", "false"); // days left until due for each color static public PrefName RED_DAYS = new PrefName("red_days", Integer.valueOf(2)); static public PrefName ORANGE_DAYS = new PrefName("orange_days", Integer.valueOf(7)); static public PrefName YELLOW_DAYS = new PrefName("yellow_days", Integer.valueOf(14)); /** keystore location */ static public PrefName KEYSTORE = new PrefName("key_store", ""); /** cached password time to live in seconds */ static public PrefName PASSWORD_TTL = new PrefName("pw_ttl", Integer.valueOf(300)); /** todo quick add, clear text after add */ static public PrefName TODO_QUICK_ENTRY_AUTO_CLEAR_TEXT_FIELD = new PrefName( "todo_option_auto_clear_text", "false"); /** todo quick add, default date to today */ static public PrefName TODO_QUICK_ENTRY_AUTO_SET_DATE_FIELD = new PrefName( "todo_option_auto_date_today", "false"); /** show only current todo in a repeating todo */ static public PrefName TODO_ONLY_SHOW_CURRENT = new PrefName("todo_only_show_current", "false"); /** shutdown action */ static public PrefName SHUTDOWN_ACTION = new PrefName("shutdown_action", ""); public static final PrefName SHUTDOWNTIME = new PrefName("shuttime", "0"); /** debug flag - trigger debug logging */ public static final PrefName DEBUG = new PrefName("debug", "false"); public static final PrefName AUDITLOG = new PrefName("auditlog", "false"); // limit on the max text size that can be put into a text area to prevent // memory issues public static final PrefName MAX_TEXT_SIZE = new PrefName("max_text_size", Integer.valueOf(1024 * 1024)); public static PrefName ICAL_EXPORTYEARS = new PrefName("ical-export-years", Integer.valueOf(2)); // option to export todos as VTODO objects instead of VEVENTS public static PrefName ICAL_EXPORT_TODO = new PrefName("ical-export-todo", "false"); public static final PrefName GOOGLE_SYNC = new PrefName("google_sync", "false"); public static final PrefName GCAL_CAL_ID = new PrefName("google_cal_id", ""); public static final PrefName GCAL_TODO_CAL_ID = new PrefName("google_todo_cal_id", ""); public static final PrefName GCAL_TASKLIST_ID = new PrefName("google_tasklist_id", ""); public static final PrefName GOOGLE_CRED_FILE = new PrefName("google_cred_file", ""); public static final PrefName GOOGLE_TOKEN_DIR = new PrefName("google_token_dir", ""); public static final PrefName GCAL_EXPORTYEARS = new PrefName("gcal-export-years", Integer.valueOf(2)); public static final PrefName GOOGLE_SUBSCRIBED = new PrefName("google_subscribed", ""); public static final PrefName GOOGLE_DB_FILE_PATH = new PrefName("google_db_file_path", ""); public static final PrefName SUB_CACHE_FILENAME = new PrefName("sub_cache_file_name", ".borg.subcache"); public static final PrefName GOOGLE_DB_FORCE_DOWNLOAD = new PrefName("google_db_force_dl", "false"); } ================================================ FILE: BORGCalendar/common/src/main/java/net/sf/borg/common/Prefs.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2003 by Mike Berger */ package net.sf.borg.common; import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.logging.Logger; import java.util.prefs.Preferences; /** * class for managing Borg preferences. */ public class Prefs { static private final Logger log = Logger.getLogger("net.sf.borg"); static private String prefRootNode = "net/sf/borg/common/util"; /** * Interface for classes that want to be notified of preference changes */ public interface Listener { /**called when preferences changed. */ void prefsChanged(); } /** list of listeners */ static private final ArrayList listeners = new ArrayList(); /** * add a listener * * @param listener the listener */ static public void addListener(Listener listener) { listeners.add(listener); } /** * Notify listeners of a pref change. */ static public void notifyListeners() { for (int i = 0; i < listeners.size(); i++) { Listener v = listeners.get(i); v.prefsChanged(); } } /** * Get a string preference value * * @param pn the preference name object * * @return the value */ public static String getPref(PrefName pn) { Object o = getPrefObject(pn); if (o instanceof Integer) return Integer.toString(((Integer) o).intValue()); return (String) getPrefObject(pn); } /** * Get an integer preference value * * @param pn the preference name object * * @return the int value */ public static int getIntPref(PrefName pn) { return (((Integer) Prefs.getPrefObject(pn)).intValue()); } /** * Get a boolean preference value * * @param pn the preference name object * * @return the boolen value */ public static boolean getBoolPref(PrefName pn) { String s = getPref(pn); return s != null && s.equals("true"); } /** * Get an Object preference value * * @param pn the the preference name object * * @return the Object value */ private static Object getPrefObject(PrefName pn) { Preferences prefs = getPrefNode(); if (pn.getDefault() instanceof Integer) { int val = prefs.getInt(pn.getName(), ((Integer) pn.getDefault()).intValue()); return (Integer.valueOf(val)); } String val = prefs.get(pn.getName(), (String) pn.getDefault()); return (val); } /** * store a preference * * @param pn the preference name object * @param val the value */ public static void putPref(PrefName pn, Object val) { log.fine("putpref-" + pn.getName() + "-" + val); Preferences prefs = getPrefNode(); if (pn.getDefault() instanceof Integer) { if (val instanceof Integer) { prefs.putInt(pn.getName(), ((Integer) val).intValue()); } else { prefs.putInt(pn.getName(), Integer.parseInt((String) val)); } } else { prefs.put(pn.getName(), (String) val); } } public static void delPref(PrefName pn) { Preferences prefs = getPrefNode(); prefs.remove(pn.getName()); } /** * Get the java.util.prefs.Preferences node where borg stores preferences. * The path is now hard coded so that it does not change when borg is refactored * * @return the Preferences node */ static private Preferences getPrefNode() { // hard code to original prefs location for backward compatiblity Preferences root = Preferences.userRoot(); return root.node(prefRootNode); } /** * constructor */ private Prefs() { // empty } /** * Import preferences from a file * * @param filename the filename * @throws Exception */ public static void importPrefs(String filename) throws Exception { InputStream istr = new FileInputStream(filename); Preferences.importPreferences(istr); istr.close(); } /** * Export preferences to a file * * @param filename the filename */ public static void export(String filename) { try { OutputStream oostr = IOHelper.createOutputStream(filename); Preferences prefs = getPrefNode(); prefs.exportNode(oostr); oostr.close(); } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } } public static void setPrefRootNode(String prefRootNode) { Prefs.prefRootNode = prefRootNode; } } ================================================ FILE: BORGCalendar/common/src/main/java/net/sf/borg/common/PrintHelper.java ================================================ /* * This file is part of BORG. * * BORG 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. * * BORG 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 * BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, * Suite 330, Boston, MA 02111-1307 USA * * Copyright 2003 by Mike Berger */ package net.sf.borg.common; import java.awt.print.PageFormat; import java.awt.print.Paper; import java.awt.print.Printable; import java.awt.print.PrinterJob; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * Some common printing related utilities */ public class PrintHelper { /** * Initializes the PrinterJob settings and sets a default print service * * @param job the job */ private static void initPrinterJobFields(PrinterJob job) { job.setJobName("BORG Printout"); Class klass = job.getClass(); try { Class printServiceClass = Class.forName("javax.print.PrintService"); Method method = klass.getMethod("getPrintService", (Class[]) null); Object printService = method.invoke(job, (Object[]) null); method = klass.getMethod("setPrintService", printServiceClass); method.invoke(job, printService); } catch (NoSuchMethodException e) { // empty } catch (IllegalAccessException e) { // empty } catch (InvocationTargetException e) { // empty } catch (ClassNotFoundException e) { // empty } } /** * Prints a printable object. Prompts the user for print settings * using the standard native dialog if available * * @param p the Printable * * @throws Exception the exception */ static public void printPrintable(Printable p) throws Exception { PrinterJob printJob = PrinterJob.getPrinterJob(); initPrinterJobFields(printJob); PageFormat pageFormat = printJob.defaultPage(); Paper paper = pageFormat.getPaper(); //pageFormat.setOrientation(PageFormat.LANDSCAPE); //paper.setSize(8.5*72,11*72); //paper.setImageableArea(0.875*72,0.625*72,6.75*72,9.75*72); pageFormat.setPaper(paper); printJob.setPrintable(p,pageFormat); if (printJob.printDialog()) printJob.print(); } } ================================================ FILE: BORGCalendar/common/src/main/java/net/sf/borg/common/Resource.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2003 by Mike Berger */ package net.sf.borg.common; import java.io.InputStream; import java.text.MessageFormat; import java.util.MissingResourceException; import java.util.Properties; import java.util.ResourceBundle; /** * Common logic for dealing with Resource Bundles. */ public class Resource { /** the borg version */ private static String version_ = null; /** * Get a resource string from the borg bundle. Translates escaped newlines * to real newlines. * * @param key * the resource key * * @return the resource string or "??key??" if the string is not found */ private static String getRawResourceString(String key) { try { String res = ResourceBundle.getBundle("borg_resource").getString( key); if (res.indexOf("\\n") == -1) return (res); StringBuffer sb = new StringBuffer(); for (int i = 0; i < res.length(); i++) { if (res.charAt(i) == '\\' && (i < res.length() - 1) && res.charAt(i + 1) == 'n') { i++; sb.append('\n'); } else { sb.append(res.charAt(i)); } } return (sb.toString()); } catch (MissingResourceException m) { return ("?" + key + "?"); } } /** * Get a resource string from the borg resource bundle. Translates escaped * newlines to real newlines. Substitute variables * * @param resourceKey * the resource key * @param params * substitutable parameters * * @return the resource string */ public static String getResourceString(String resourceKey, Object[] params) { return MessageFormat.format(getResourceString(resourceKey), params); } /** * Get a resource string from the borg resource bundle. Translates escaped * newlines to real newlines. * * @param resourceKey * the resource key * * @return the resource string */ public static String getResourceString(String resourceKey) { return parseResourceText(getRawResourceString(resourceKey)); } /** * Gets the borg version, which is stored in its own properties file * * @return the version */ public static String getVersion() { if (version_ == null) { try { // get the version and build info from a properties file in the // jar file InputStream is = Resource.class.getResource("/properties") .openStream(); Properties props = new Properties(); props.load(is); is.close(); version_ = props.getProperty("borg.version"); } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } } return (version_); } private static String parseResourceText(String s) { int pos; if ((pos = s.indexOf('|')) != -1) return (s.substring(0, pos)); return s; } } ================================================ FILE: BORGCalendar/common/src/main/java/net/sf/borg/common/SendJavaMail.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2003 by Mike Berger */ /* * Sendmail.java * * Created on October 20, 2003, 10:01 AM */ package net.sf.borg.common; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.net.ssl.SSLContext; import java.io.File; import java.util.Date; import java.util.Properties; import java.util.logging.Logger; /** * utility class to send out email via java mail */ public class SendJavaMail { static private final Logger log = Logger.getLogger("net.sf.borg"); /** * boilerplate Authenticator. */ private static class MyAuthenticator extends Authenticator { private final String username; private final String password; public MyAuthenticator(String user, String pass) { username = user; password = pass; } @Override public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } } /** * Send an mail. * * @param host * the smtp host * @param msgText * the email text * @param subject * the subject * @param from * the from address * @param to * the to address * @param user * the smtp user * @param pass * the smtp password * * @throws Exception * the exception */ public static void sendMail(String host, String msgText, String subject, String from, String to, String user, String pass) throws Exception { log.info("Sending mail to: " + to); //log.info("protocols:" + String.join(" ", SSLContext.getDefault().getSupportedSSLParameters().getProtocols())); // create some properties and get the default Session Properties props = new Properties(); props.put("mail.smtp.host", host); String port = Prefs.getPref(PrefName.EMAILPORT); props.put("mail.smtp.port", port); String ed = Prefs.getPref(PrefName.EMAILDEBUG); if (ed.equals("1")) props.put("mail.debug", "true"); if (Prefs.getBoolPref(PrefName.ENABLETLS)) props.put("mail.smtp.starttls.enable", "true"); String protocols = String.join(" ", SSLContext .getDefault() .getSupportedSSLParameters() .getProtocols() ); props.put("mail.smtp.ssl.protocols", protocols); Authenticator auth = null; if (user != null && !user.equals("") && pass != null && !pass.equals("")) { auth = new MyAuthenticator(user, pass); props.put("mail.smtp.auth", "true"); } Session session = Session.getInstance(props, auth); //session.setDebug(true); try { // create a message Message msg = new MimeMessage(session); msg.setFrom(new InternetAddress(from)); InternetAddress[] address = { new InternetAddress(to) }; msg.setRecipients(Message.RecipientType.TO, address); // msg.setSubject(Resource.getResourceString("Reminder_Notice")); msg.setSubject(subject); msg.setSentDate(new Date()); msg.setText(msgText); Transport.send(msg); } catch (MessagingException mex) { processMessagingException(mex); throw mex; } log.info("mail sent"); } /** * Send a multipart mime email with attachments * * @param host * the smtp host * @param msgText * the email text * @param subject * the subject * @param from * the from address * @param to * the to address * @param user * the smtp user * @param pass * the smtp password * @param attachments * array of filenames to attach * * @throws Exception * the exception */ public static void sendMailWithAttachments(String host, String msgText, String subject, String from, String to, String user, String pass, String[] attachments) throws Exception { // create some properties and get the default Session Properties props = new Properties(); props.put("mail.smtp.host", host); String port = Prefs.getPref(PrefName.EMAILPORT); props.put("mail.smtp.port", port); String ed = Prefs.getPref(PrefName.EMAILDEBUG); if (ed.equals("1")) props.put("mail.debug", "true"); if (Prefs.getBoolPref(PrefName.ENABLETLS)) props.put("mail.smtp.starttls.enable", "true"); Authenticator auth = null; if (user != null && !user.equals("") && pass != null && !pass.equals("")) { auth = new MyAuthenticator(user, pass); props.put("mail.smtp.auth", "true"); } Session session = Session.getInstance(props, auth); //session.setDebug(true); try { // create a message Message msg = new MimeMessage(session); msg.setFrom(new InternetAddress(from)); InternetAddress[] address = { new InternetAddress(to) }; msg.setRecipients(Message.RecipientType.TO, address); // msg.setSubject(Resource.getResourceString("Reminder_Notice")); msg.setSubject(subject); msg.setSentDate(new Date()); Multipart mp = new MimeMultipart(); MimeBodyPart textpart = new MimeBodyPart(); textpart.setText(msgText); mp.addBodyPart(textpart); for( String filename : attachments) { File file = new File(filename); MimeBodyPart attpart = new MimeBodyPart(); DataSource source = new FileDataSource(file); attpart.setDataHandler( new DataHandler(source)); attpart.setFileName(file.getName()); mp.addBodyPart(attpart); } // add the Multipart to the message msg.setContent(mp); Transport.send(msg); } catch (MessagingException mex) { processMessagingException(mex); throw mex; } } /** * Process a messaging exception - print out something useful to stdout * * @param mex * the MessagingException */ static private void processMessagingException(MessagingException mex) { StringBuffer buf = new StringBuffer(); buf.append("\n--Exception handling in BORG.SendJavaMail\n"); mex.printStackTrace(); Exception ex = mex; do { if (ex instanceof SendFailedException) { SendFailedException sfex = (SendFailedException) ex; Address[] invalid = sfex.getInvalidAddresses(); if (invalid != null) { buf.append(" ** Invalid Addresses\n"); for (int i = 0; i < invalid.length; i++) buf.append(" " + invalid[i] + "\n"); } Address[] validUnsent = sfex.getValidUnsentAddresses(); if (validUnsent != null) { buf.append(" ** ValidUnsent Addresses\n"); for (int i = 0; i < validUnsent.length; i++) buf.append(" " + validUnsent[i] + "\n"); } Address[] validSent = sfex.getValidSentAddresses(); if (validSent != null) { buf.append(" ** ValidSent Addresses\n"); for (int i = 0; i < validSent.length; i++) buf.append(" " + validSent[i] + "\n"); } } if (ex instanceof MessagingException) ex = ((MessagingException) ex).getNextException(); else ex = null; } while (ex != null); log.severe(buf.toString()); } } ================================================ FILE: BORGCalendar/common/src/main/java/net/sf/borg/common/SocketClient.java ================================================ package net.sf.borg.common; // This example is from the book _Java in a Nutshell_ by David Flanagan. // modified by Mike Berger. No license appllies to this source file import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.Socket; import java.util.logging.Logger; /** * SocketClient sends text messages over a socket */ public class SocketClient { static private final Logger log = Logger.getLogger("net.sf.borg"); /** * Send a msg. * * @param host the host * @param port the port * @param msg the msg * * @return the response string * * @throws IOException Signals that an I/O exception has occurred. */ public static String sendMsg(String host, int port, String msg) throws IOException { Socket s = null; String line = null; try { s = new Socket(host, port); BufferedReader sin = new BufferedReader(new InputStreamReader(s .getInputStream())); PrintStream sout = new PrintStream(s.getOutputStream()); sout.println(msg); line = sin.readLine(); // Check if connection is closed (i.e. for EOF) if (line == null) { log.info("Connection closed by server."); } } catch (IOException e) { if (s != null) s.close(); throw e; } // Always be sure to close the socket finally { try { if (s != null) s.close(); } catch (IOException e2) { throw e2; } } return line; } } ================================================ FILE: BORGCalendar/common/src/main/java/net/sf/borg/common/SocketServer.java ================================================ package net.sf.borg.common; // This example is from the book _Java in a Nutshell_ by David Flanagan. // modified by Mike Berger - no license applies to this source file import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.util.logging.Logger; /** * SocketServer is a thread that listens on a socket and starts a thread for * each incoming connection. Each connection thread calls back to the SocketHandler * to process each incoming message */ public class SocketServer extends Thread { static private final Logger log = Logger.getLogger("net.sf.borg"); // This class is the thread that handles all communication with a client static private class Connection extends Thread { protected Socket client; protected BufferedReader in; protected PrintStream out; private final SocketHandler handler_1; // Initialize the streams and start the thread public Connection(Socket client_socket, SocketHandler handler) { this.client = client_socket; this.handler_1 = handler; try { this.in = new BufferedReader(new InputStreamReader(this.client.getInputStream())); this.out = new PrintStream(this.client.getOutputStream()); } catch (IOException e) { try { this.client.close(); } catch (IOException e2) { /* empty */} log.severe("Exception while getting socket streams: " + e); return; } this.setName("Socket Connection"); this.start(); } // Provide the service. // Read a line, reverse it, send it back. @Override public void run() { try { for(;;) { // read in a line String line = this.in.readLine(); if (line == null) break; String output = this.handler_1.processSocketMessage(line); this.out.println(output); } } catch (IOException e) { /* empty */ } finally { try {this.client.close();} catch (IOException e2) { /* empty */ } } } } protected ServerSocket listen_socket; /** the socket handler that will be called for each incoming message */ private final SocketHandler handler_; private static void fail(Exception e, String msg) { log.severe(msg + ": " + e); } /** * Create a ServerSocket to listen for connections on; start the thread. * * @param port the port * @param handler the handler to call back with messages */ public SocketServer(int port, SocketHandler handler) { this.handler_ = handler; try { this.listen_socket = new ServerSocket(port); } catch (IOException e) { fail(e, "Exception creating server socket"); } log.info("Server: listening on port " + port); this.setName("Socket Server"); this.start(); } // The body of the server thread. Loop forever, listening for and // accepting connections from clients. For each connection, // create a Connection object to handle communication through the // new Socket. /* (non-Javadoc) * @see java.lang.Thread#run() */ @Override public void run() { try { while(true) { Socket client_socket = this.listen_socket.accept(); new Connection(client_socket, this.handler_); } } catch (IOException e) { fail(e, "Exception while listening for connections"); } } /** * Interface for a class that can process messages from a socket server */ public static interface SocketHandler { /** * Process a message. * * @param msg the msg * * @return the response string to be sent back to the socket client */ String processSocketMessage(String msg); } } ================================================ FILE: BORGCalendar/common/src/main/java/net/sf/borg/common/Warning.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2004 by Mike Berger */ /* * Warning.java * * Created on April 14, 2004, 9:50 PM */ package net.sf.borg.common; /** * Warning is something to throw when there is a non fatal condition and the best way to handle it * is to use the throw mechanism. Catchers of this class should treat the message * as warning or informational text and should not show the stack trace to the user * */ public class Warning extends Exception { private static final long serialVersionUID = -1336329298335625745L; /** * Creates a new instance of Warning. * * @param msg the msg */ public Warning(String msg) { super(msg); } } ================================================ FILE: BORGCalendar/common/src/main/java/net/sf/borg/common/package.html ================================================ package details Common utility classes ================================================ FILE: BORGCalendar/common/src/main/resources/borg_resource.properties ================================================ *****_NEW_APPT_***** = ***** NEW APPT ***** -db_argument_is_missing = -db argument is missing About = About|A About_BORG = About BORG Action = Action|C Add = Add|A|INSERT AddCat = Enter New Category: Add_Log = Add Log Entry Add_New = Add New|N|INSERT Add_State = Add State Add_Type = Add Type Address = Address Address_Book = Address Book|A|ctrl A Address_Book_Entry = Address Book Entry After = After All = All|A All_Open = All Open Apply_DB_Change = Apply DB Change|C Appointment_Editor = Appointment Editor Appointment_Editor_for_ = Appointment Editor for Before = Before Berger-Organizer_v = Berger-Organizer Birthday = Birthday: Boxing_Day = Boxing Day Browse = Browse|B Build_Time\:_ = \\nBuild Time: CLOSED = CLOSED Caldav-Overwrite-Warn = Really Overwrite the server? This cannot be undone!! Canada_Day = Canada Day Cancel = Cancel Cannot_Copy = There are unsaved changes. Cannot Copy. Categories = Categories|R Category = Category|R Category_Name_Required = Category Name Required Cell_Phone\: = Cell Phone: Change = Change|G|ctrl E CheckList = CheckList CheckList_Name = CheckList Name CheckLists = CheckLists Christmas = Christmas Civic_Holiday = Civic Holiday Clear = Clear Clear_DueDate = Clear Due Date Clone = Clone|O|ctrl O Close = Close|L|ctrl X Closed = Closed|L Color = Color|O Columbus_Day = Columbus Day Commonwealth_Day = Commonwealth Day Company = Company: Confirm_DB_Change = Confirm DB Change Confirm_Delete = Confirm Delete Copy = Copy Copy_CheckList = Copy CheckList Could_not_parse_times\:_ = Could not parse times: DataBase_Directory = DataBase Directory|D DatabaseInformation = Database Information Date = Date|D Day_View = Day View Daylight_Savings_Time = Daylight Savings Time Days = Days DaysLeftColors = Days-Left Colors Days_Left = Days Left Delete = Delete|D|DELETE Delete_Addresses = Delete Address(es)? Delete_CheckList = Delete CheckList Delete_Memo = Delete Memo Delete_One_Only = Delete One Only|Y Delete_State = Delete State Delete_Type = Delete Type Description = Description Directory_[ = Directory [ Discard_Text? = Discard Text? Dismiss = Dismiss||alt X Done_(Delete) = Done (Delete)|E Done_(No_Delete) = Done (No Delete)|O Due = Due DueDate = Due Date Due_Date = Due Date|T Edit = Edit|E EditNew = Edit New Edited_CheckList = Current CheckList has been changed. Discard Changes? Edited_Memo = Current Memo has been changed. Discard Changes? Email = Email Email\: = Email: EmailFrom = From Email Address EmailParameters = Email Parameters Enable_Daily_Email = Send Daily Email Enable_Email = Enable Email EncryptOnSave = Encrypt On Save EncryptedItem = <<>> EncryptedItemShort = <> Encryption = Encryption EndDate = EndDate EndTime = End Time EnterPasswordToDecrypt = Enter Keystore Password: Enter_CheckList_Name = Please enter the name for the new checklist Enter_Date = Enter Date Enter_Log = Enter Log Entry Enter_Memo_Name = Please enter the name for the new memo Existing_CheckList = A checklist already exists with that name Existing_Memo = A memo already exists with that name Exit = Exit|X|alt X Export_Memo_Decrypt = Memo must be decrypted before exporting Father's_Day = Father's Day Fax\: = Fax: Filter\: = Filter:|T Find = Find|F First = First First_Name\: = First Name: Frequency = Frequency|Q Future_Todo_Warn = This todo has future undone occurrences. Are you sure you want to delete? Go_To = Go To|G Ground_Hog_Day = Ground Hog Day Half_Day = Half Day|L Halloween = Halloween Help = Help|H|F1 Hide = Hide Hide_Pops = Hide All Reminders Holiday = Holiday|I HomeAddress = Home Address Home_City\: = City: Home_Country\: = Country: Home_Phone = Home Phone Home_Phone\: = Home Phone: Home_State\: = State: Home_Street_Address = Street Address: Home_Zip_Code\: = Zip Code:|Z Hour = Hour Hours = Hours ISO_week_number = Use ISO 8601 Week Numbering Import = Import ImportFile = Import from File ImportCarddav = Import from CardDav ImportUrl = Import From URL Import_WARNING = Import WARNING Import_XML_error = Error importing appointment(s). Please check the XML file for invalid values. Import_error = Import failed with errors. Please see log for details. Importing_ = Importing Independence_Day = Independence Day Initializing = Initializing Insert_Above = Insert Above Insert_Below = Insert Below InvalidMinute = Invalid value for minute Item = Item Item_ = Item Item_\# = Item #|I KeyStore = KeyStore Key_Store_Not_Set = Key Store location is not set. To use encryption, it must be set in the options. Labor_Day = Labor Day Labour_Day_(Can) = Labour Day (Can) Last = Last Last_Name\: = Last Name: License = License|L Logs = Logs Look_and_Feel\: = Look and Feel:|L Martin_Luther_King_Day = Martin Luther King Day Memo_Name = Memo Name Memo_not_exist = Cannot find memo in database. Has it been deleted from another window? Memorial_Day = Memorial Day Memos = Memos Minute = Minute Minutes = Minutes Month_View = Month View Mother's_Day = Mother's Day Move_To_Following_Day = Move to Following Day|M NEW_Item = NEW Item New_CheckList = New CheckList New_Memo = New Memo New_State = New State New_Task_Type = New Task Type New_Theme_Name = Enter a new theme name New_Year's_Day = New Year's Day Next_States = Next States Nickname\: = Nickname: NoOpenState = Error: No initial state found for task type No_Categories = There are no categories No_Key_Store = Could not read Key Store: No_Print = Printing has not been implemented in this context No_Specific_Time = No Specific Time|P No_more = No more reminders for this appointment Not_Found_End = Not Found - End of Search... Notes = Notes Notice = Notice Now = -- Now! -- OK = OK OPEN = OPEN Open = Open|N Open_Calendar = Open Calendar|C Options = Options|O|ctrl O OverDue = Past Due: PA = PA|A Pager\: = Pager: Password = Password|P Password_Prompt = Please enter your BORG keystore password. Reason: PasswordWhitespace = Password must not be empty or all whitespace. KeyStore not created. PasswordsDoNotMatch = Passwords Do Not Match - KeyStore not created Paste = Paste Please_choose_File_to_Import_From = Please choose File to Import From Please_choose_directory_to_place_XML_files = Please choose directory for XML export Please_enter_some_appointment_text = Please enter some appointment text Please_select_a_state = Please select a state Please_select_a_type = Please select a type Plugins = Plugins Popup_Times = Popup Times Presidents_Day = Presidents Day Pri = Pri|P Print = Print|P|ctrl P Print_Chooser = Print Chooser Print_In_Color? = Print In Color?|C Priority = Priority Private = Private|V ProjectInformation = Project Information Properties = Properties Quick_Note = Quick Note Quiet = Quiet Really_Delete_ = Really Delete Really_Delete_Apps = Really Delete Appointment(s) Really_change_the_database? = Really change the database? Really_delete_number_ = Really delete number Recurrence = Recurrence Remembrance_Day = Remembrance Day Reminder = Reminder Reminder_Notice = BORG Reminder Notice Remove = Remove Rename = Rename Rename_State = Rename State Rename_Type = Rename Type Reset_Task_States_to_Default = Reset Task States to Default|R Resolution = Resolution Restart_Warning = You must restart the program for these changes to apply. The program will now exit... RunSQL = Run SQL SMTP_Port = SMTP Port SMTP_Server = SMTP Server|S SMTP_password = SMTP Password (Optional) SMTP_user = SMTP User (Optional) Save = Save|S|ctrl S Save_&_Close = Save & Close|C| Save_CheckList = Save CheckList Save_Memo = Save Memo Screen_Name\: = Screen Name: SearchString = Search String Search_For = Search For... Search_Next = Search Next... Search_Results = Search Results Select = Select SelectKeyStore = Select Key Store File Select_CheckList_Warning = A checklist must be selected to perform this action Select_Memo_Warning = A memo must be selected to perform this action Select_initial_state = Select Initial State Select_next_state = Select next state Set_DueDate = Set Due Date Set_Initial_State = Set Initial State Show_Canadian_Holidays = Show Canadian Holidays|C Show_Pops = Show All Reminders Show_Private_Appointments = Private Appointments Show_Public_Appointments = Show Public Appointments|P Show_Stack_Trace = Show Stack Trace Show_U.S._Holidays = Show U.S. Holidays|U St._Patrick's_Day = St. Patrick's Day Standard_Time = Standard Time StartDate = Start Date StartToSysTray = Start to System Tray Start_After_End = Start Date cannot be later than the End Date Start_Date = Start Date|D Start_Time\: = Start Time:|A State_Change = State Change States = States Status = Status|U SubTasks = SubTasks Sync = Sync Sync_Cleanup = Sync (with Cleanup) Sync-Not-Set = Sync is not on. Please fill in the Sync settings in the Options Sync-Warn = There are items that have not been synced. Continue with shutdown? TaskInformation = Task Information Task_Created = Task Created Task_State_Editor = Task State Editor Task_Types = Task Types Text = Text Thanksgiving = Thanksgiving Thanksgiving_(Can) = Thanksgiving (Can) Theme = Theme Time = Time Times = Times|M To_Do = To Do|T|ctrl T To_Do_List = To Do List|D Today = Today|T|HOME Type = Type|Y URL_is_Empty = URL is Empty Uncheck_All = Uncheck All Unhide_All = Unhide All Until = Until Use_24_hour_time_format = Use 24 hour time format|2 Use_system_beep = Use System Beep UserColorScheme = User Color Scheme Vacation = Vacation|C Valentine's_Day = Valentine's Day Veteran's_Day = Veteran's Day Victoria_Day = Victoria Day View = View Web_Page\: = Web Page: Week_Starts_with_Monday = Week Starts with Monday|M Week_View = Week View Week_View_End_Hour\:_ = Day End Hour:|E Week_View_Start_Hour\:_ = Day Start Hour:|S WholeWord = Whole Word WorkAddress = Work Address Work_City\: = City: Work_Country\: = Country: Work_Phone = Work Phone Work_Phone\: = Work Phone: Work_State\: = State: Work_Street_Address = Street Address: Work_Zip_Code\: = Zip Code: Year_View = Year View Your_Email_Address = To Email Address ]_does_not_exist = ] does not exist ]_is_not_a_directory = ] is not a directory __through__ = through addcat = Add New Category|A addresses = Addresses all_undos = Show Entire Undo Stack (read-only) allow_self_signed = Allow Self-Signed SSL appearance = Appearance apply = Apply|A appointment = Appointment appointments = Appointments appt_error = The appointment window will close due to a prior error. Perhaps an appointment was removed from the ToDo window while the editor was open. If not, restart Borg apptlist = Appointment List appttext = Appointment Text appttime = Appointment Time att_folder_err = Cannot create attachment folder: att_not_found = Could not find linked object att_owner_null = Cannot save link before this new item is saved to the database attach_file = Attach File audit_logging = Audit Logging backup_dir = Backup Folder backup_dir_error = Cannot write to backup folder {0}. Please check that it exists and is writable. Backup will not be done. backup_notice = Check here to also write backup data to bad_db_2 = \\nIf a bad database dir is causing the error, please click OK to change it. bd_rem_days = Birthday Reminder Days (-1 to disable) beep_options = Reminder Sound biweekly = biweekly black = black blue = blue borg_backup = BORG Backup File calShowSubtask = Show Subtasks on Calendar/Todo calShowTask = Show Tasks on Calendar/Todo case_sensitive = Case Sensitive cat_choose = Choose Category catchooser = Category Chooser changedate = Change Date|H chg_cat = Change Category chg_color = Change Color choose = choose... choose_file = Choose File choosecat = Choose Categories to Display|C clear_all = Clear All|C clear_undos = Clear Undo Log close_date = Close Date close_proj_warn = Cannot close project. At least one child is not closed. close_tabs = Close All Tabs collapse = Collapse confirm_overwrite = Confirm Overwrite contact = Contact Information contrib = Mohan Embar, Stepan Borodulin, Josie Stauffer, Meianandh, Travis Hein contributions_by = Thanks for Contributions to: copy_appt = Copy Appointment copyright = Copyright create_key_store = Key Store File does not exist. Please enter a password to create a new Key Store, or cancel to abort. You must enter the password twice for confirmation. created = Created custom_times_header = Popup Reminder Times for daily = daily db_set_to = \\n\\nYour database dir is set to: db_time_error = The database shutdown timestamp is older than the shutdown timestamp in the BORG preferences. It is possible that BORG failed to properly write to the database when last shutdown. Please check for lost data, unless you have been using multiple databases. decrypt = Decrypt default = default defaultfg = default fg del_task_warning = Tasks exist for type {0}. Cannot delete task type {0}. del_tip = Delete all occurrences (repeats) of an appointment delcat_warn = WARNING! Deleting ALL appointments and tasks for category delete_cat = Delete Category|D delete_cat_choose = Choose Category to Delete delete_selected = Delete Selected deleted = Deleted dlist = Select Days dock = Dock done = done doo_tip = Delete only the current occurrence of a repeating appointment draw_background_pills = Draw Background Pills duration = Duration dview_font = Day View edit_types = Edit Task Types and States|E elapsed_time = Elapsed emailNotEnabled = Email is not enabled in the options. empty_desc = Please enter a Description empty_summ = Please enter a Summary enable_popups = Enable Popup Reminders\n|P enable_systray = Enable System Tray Icon (requires restart) enable_tls = Enable TLS enturl = Enter URL: ep = Edit Preferences|E exit_no_backup = Exit without creating backup file expXML = Export Database expand = Expand export = Export exportToIcalZipFile = Export to yearly ICal files exportToFile = Export To File export_prefs = Export Preferences font_chooser = Font Chooser fonts = Fonts forever = Repeat Forever|F future_birthday = Warning: saving a birthday that is set to a future date future_todo_rpts = Future Todo Repeats gradient_appts = Draw Gradient Color in Appointment Boxes green = green h2info = H2 Information haslinks = Has Links hide_strike = Strike-through Items history = History hsqldb = HSQLDB hsqldbinfo = HSQLDB Information ical_export_todos = Export Todos as VTODO objects ical_files = ICAL Files ical_options = Ical Options iconSize = Icon Size (Restart Required) impXML = Import single database table impexpMenu = Import / Export|I import_format_error = Import failed. File format is not valid. import_prefs = Import Preferences import_zip = Import Entire Backup Zipfile jdbc = Generic JDBC link_file = Link file links = Links locale = Locale (Restart Required)|O max_length = The maximum length of {0} is {1} memo = Memo min_aft_app = minutes after the appointment min_bef_app = minutes before the appointment minute_reminder = minute reminder minutes_ago = minutes ago! misc = Miscellaneous monthly = monthly (date) monthly_day = monthly (day) monthly_day_last = monthly (day) last mview_font = Print Font mwf = Mon-Wed-Fri navy = navy ndays = Every N Days newDate\: = New Date:|N nmonths = Every N Months noOutput = SQL Command Returned no output or errors no_appts_selected = One or more appointments must be selected no_copy_enc = Cannot copy an Encrypted Appointment using the Editor. no_search_results = The search returned no results no_sound = no sound no_subtask_action = Cannot perform the selected action on a subtask from the task list UI. Use the task UI. no_undos = Nothing to Undo nummonths = Number of Months to Print? nweeks = Every N Weeks nyears = Every N Years on_shutdown = On Shutdown: once = once open_subtasks = Cannot Close Task, Subtasks are not all closed open_tasks = Open Tasks overwrite_warning = File Exists. OK to Overwrite File: parent = Parent please_confirm = Please Confirm popup_reminders = Popup Reminders proj_sd_warning = Cannot save task. The task's start date is earlier than the project's start date projchild_warning = Cannot save project. A child project has a due date later than the project's due date projdd_warning = Cannot save project. A child task has a due date later than the project's due date project = Project project_cycle = Cannot save project. A project cannot be its own ancestor. project_not_found = Error: Project not found in database. Has it been deleted? project_tree = Project Tree projects = Projects projpar_warning = Cannot save project. Its due date is later than its parent project's due date prompt_for_backup = Prompt for backup action pw_time = Password Expiration (secs): recur_compat = Error: Recurrence is not compatible with the appointment date red = red reload = Reload remcat = Remove Unused Categories|R reminder_bg = Reminder Background reminder_list = Show All Reminders in a Single Window reminder_time = Reminder Email Time|R rename_task_warning = Tasks exist for type {0}. If you proceed, the tasks states will be saved to the database and the existing tasks will be updated to the new type. Proceed? repeating = Repeating resendEmail = Send Email Reminder reset_state_warning = This will reset any customizations you have made to the task model\\nThe task model will be reset to the shipped default.\\nDo you really want to do this?\\n restore_defaults = restore defaults rlsnotes = Release Notes save_Def = Save Defaults sd_dd_warn = Error: Due Date cannot be before the Start Date sd_tip = Save current values as new Appointment defaults search_color_warn = Warning: only Appointment colors can be changed from the Search Window select_all = Select All|S select_appt = Please select one appointment select_export_dir = Select Export Directory select_link_type = Select Object Type for Link selectdb = Database is not set. Please enter database settings. send_reminder = Send Reminder Email|E set_appt_font = Month View set_def_font = Default show_closed = Show Closed Projects show_closed_tasks = Show Closed Tasks show_date_in_systray = Show Date in System Tray show_rpt_num = Show Repeat Number|W show_subtasks = Show Subtasks show_task_reminders = Show Reminders for Tasks, Projects, and Subtasks show_task_status_in_tree = Show Task Number and Status in Task Tree show_taskbar_reminders = Show Taskbar Notifications showdoy = Show Day Of Year|Y shutdown = Shutting Down....Please wait shutdown_options = Select OK to shutdown socket_port = Socket Port (-1=disabled, requires restart) socket_warn = Socket Port must be an integer sort_by_priority = Sort Appointments By Priority splash = Show splash screen|S sqliteinfo = SQLITE Information srch = Search|S|F3 stackonerr = Show Stack Trace Option on Error Dialogs|K startupViews = Startup Views stdd_warning = Cannot save task. A subtask has a due date later than the task's due date strike = strike-through stripecolor = Table Stripe Color stsd_warning = Cannot save task. A subtask has a start date earlier than the task's start date subject = Subject subscribed_cals = Subscribed Calendars subtask = Subtask subtask_id = Subtask ID summary = Summary syncing = Syncing....Please wait task = Task taskOptions = Task Options task_abbrev = Show Task Numbers on Calendar task_parent_closed = Cannot save task in open state when parent project is closed. taskdd_warning = Cannot save task with a due date later than the project due date tasks = Tasks todoOptions = Todo Options todo_only_show_current = For repeating ToDo's, only show the current instance todo_option_auto_clear_text = Clear To Do text field on Add todo_option_auto_date_today = Default date to today todo_reminder_freq = Minutes between reminders for untimed todos todomissingdata = Please enter both the todo text and date. todoquickentry = Quick Todo total_tasks = Total Tasks translations = Spanish: Josu Gil Arriortua, Pedro Falcato (AR), Redy Rodr\u00EDguez Russian: Stepan Borodulin\\nGerman: Joerg Gabel, Philip Oettershagen, and Stefan Pottinger\\nItalian: Piero Trono Polish: Rafa\u0142 Gawro\u0144ski, Jerzy Luszawski\\nSimplified Chinese: LaughCry\\nDutch: Stefan Bruckner, Rudy Defrene (BE)\\nPortugu\u00EAs (Brasil): Abinoam Marques Jr. tray_bg = Tray Icon Background tray_fg = Tray Icon Foreground tray_font = Tray Icon Font truncate_appts = Truncate Appointments in Month View|T tth = Tues-Thurs ucolortext1 = use user colors in todo list|T ucolortext10 = holidays ucolortext11 = birthdays ucolortext12 = default bg ucolortext13 = holiday ucolortext14 = halfday ucolortext15 = vacation ucolortext16 = today ucolortext17 = weekend ucolortext18 = weekday ucolortext2 = mark todo on calendar ucolortext4 = text color 1 ucolortext5 = text color 2 ucolortext6 = text color 3 ucolortext7 = text color 4 ucolortext8 = text color 5 ucolortext9 = tasks uncategorized = undo = Undo unknown = unknown unsync-Warn = **CAUTION** This will remove all google sync data from the database. This can be used to prepare for full syncing to an empty google calendar. It will break the relationship with all current google events. Really Proceed? until_date_error = Repeat Until date must be later than the appointment date until_null_error = Please enter the repeat until date updated = Updated url = URL use_ssl = Use SSL user = user vacation_warning = Cannot select both Full and Half Day Vacation for the same Appointment. verbose_logging = Verbose Logging view_log = View Log viewchglog = Change Log|V weekdays = Monday-Friday weekends = Saturday and Sunday weekly = weekly white = white write_backup_file = Backup to a file wview_font = Week View xml_file = XML Files yearly = yearly years_to_export = Years To Export yview_font = Year View ================================================ FILE: BORGCalendar/common/src/main/resources/borg_resource_de.properties ================================================ *****_NEW_APPT_***** = Neuer Termin -db_argument_is_missing = Datenbank-Wert fehlt About = \u00DCber...|A About_BORG = \u00DCber BORG Action = Aktion|C Add = Hinzuf\u00FCgen|A|INSERT AddCat = Neue Kategorie einf\u00FCgen: Add_Log = Neuer Protokolleintrag Add_New = Neuer Eintrag|N|INSERT Add_State = Neuer Status Add_Type = Neuer Typ Address = Adresse Address_Book = Adressbuch|A|ctrl A Address_Book_Entry = Adressbucheintrag After = nachher All = Alle|A All_Open = Alle offenen Apply_DB_Change = DB-\u00C4nderung anwenden|C Appointment_Editor = Termin-Editor Appointment_Editor_for_ = Termin f\u00FCr den Before = bevor Berger-Organizer_v = Berger-Organizer v Birthday = Geburtstag:|B Boxing_Day = Boxtag Browse = Durchsuchen|B Build_Time\:_ = \\nBuild Zeit:\\n CLOSED = GESCHLOSSEN Canada_Day = Kanadatag Cancel = Abbrechen Categories = Kategorien|R Category = Kategorie|R Cell_Phone\: = Handy: Change = \u00C4ndern|N|ctrl E Christmas = Weihnachten Civic_Holiday = St\u00E4dtischer Feiertag Clear_DueDate = L\u00F6sche Enddatum Clone = Duplizieren|O|ctrl O Close = Schlie\u00DFen|L|ctrl X Closed = Schlie\u00DFen|L Color = Farbe|O Columbus_Day = Kolumbustag Commonwealth_Day = Commonwealth-Tag Company = Firma:|F Confirm_DB_Change = Datenbank-\u00C4nderung best\u00E4tigen Confirm_Delete = Best\u00E4tige l\u00F6schen Copy = Kopieren Could_not_parse_times\:_ = Konnte Zeiten nicht verarbeiten: DataBase_Directory = Datenbankverzeichnis|D DatabaseInformation = Datenbank Date = Datum|D Day_View = Tagesansicht Daylight_Savings_Time = Sommerzeit Days = Tage Days_Left = Tage \u00FCbrig Delete = L\u00F6schen|D|DELETE Delete_Addresses = Adresse(n) l\u00F6schen? Delete_Memo = Notiz l\u00F6schen Delete_One_Only = Einzeln l\u00F6schen|Y Delete_State = L\u00F6schen Delete_Type = L\u00F6schen Description = Beschreibung Directory_[ = Verzeichnis[ Discard_Text? = Text verwerfen? Dismiss = Schlie\u00DFen||alt X Done_(Delete) = Fertig(l\u00F6schen)|E Done_(No_Delete) = Fertig (nicht l\u00F6schen)|O DueDate = Enddatum Due_Date = Enddatum|T Edit = Bearbeiten|E EditNew = Neuen Termin bearbeiten Email = Email Email\: = Email:|E EmailParameters = Email Enable_Email = Email verwenden|E EndDate = Enddatum Enter_Log = Protokolleintrag eintragen Enter_Memo_Name = Bitte Name f\u00FCr die neue Notiz eingeben Existing_Memo = Es existiert bereits eine Notiz mit diesem Namen Exit = Beenden|X|alt X Father's_Day = Vatertag Fax\: = Fax:|A Filter\: = Filter:|T First = Vorname|V| First_Name\: = Vorname:|V Frequency = H\u00E4ufigkeit|Q Go_To = Gehe zu|G Ground_Hog_Day = Murmeltiertag Half_Day = Halber Tag|L Halloween = Halloween Help = Hilfe|H|F1 Holiday = Feiertag|I HomeAddress = Adresse (Privat) Home_City\: = Ort:|C Home_Country\: = Land:|U Home_Phone = Telefon (Privat) Home_Phone\: = Telefon (Privat):|H Home_State\: = Bundesland:|T Home_Street_Address = Adresse, Hausnummer:|A Home_Zip_Code\: = PLZ:|Z Hour = Stunde Hours = Stunden ISO_week_number = Benutze ISO 8601 f\u00FCr Wochennummerierung Import = Importiere Import_WARNING = ACHTUNG Import Importing_ = Importiere Independence_Day = Unabh\u00E4ngigkeitstag Initializing = Initialisiere Item = Eintrag Item_ = Eintrag Item_\# = Eintrag #|I Labor_Day = Tag der Arbeit Labour_Day_(Can) = Tag der Arbeit (Can) Last = Nachname Last_Name\: = Nachname:|N License = Lizenz|L Look_and_Feel\: = Aussehen:|L Martin_Luther_King_Day = Martin Luther King Tag Memo_Name = Notizname Memorial_Day = Gedenktag Memos = Notizen Minute = Minute Minutes = Minuten Month_View = Monatsansicht Mother's_Day = Muttertag Move_To_Following_Day = Zum n\u00E4chsten Tag springen|M NEW_Item = Neuer Eintrag New_Memo = Neue Notiz New_State = Neuer Status New_Task_Type = Neuer Aufgabentyp New_Year's_Day = Neujahr Next_States = Nachfolger-Stati Nickname\: = Spitzname: NoOpenState = Fehler: Kein Anfangszustand gefunden f\u00FCr Aufgabentyp No_Specific_Time = Ganztags|G No_more = Keine weiteren Erinnerungen f\u00FCr diesen Termin Notes = Bemerkungen Notice = Mitteilung Now = -- Jetzt! -- OK = OK OPEN = Offen Open = \u00D6ffnen|N Open_Calendar = Kalender|C Options = Optionen|O|ctrl O PA = Person|A Pager\: = Pager:|P Password = Passwort|P Please_choose_File_to_Import_From = Bitte w\u00E4hlen Sie die zu importierende Datei aus Please_choose_directory_to_place_XML_files = W\u00E4hlen Sie ein Verzeichnis f\u00FCr die XML-Dateien Please_enter_some_appointment_text = Bitte Beschreibung eingeben Please_select_a_state = Einen Status ausw\u00E4hlen Please_select_a_type = Einen Typ ausw\u00E4hlen Popup_Times = Popup-Zeiten Presidents_Day = Pr\u00E4sidententag Pri = Priorit\u00E4t|P Print = Drucken|P|ctrl P Print_Chooser = Drucker-W\u00E4hler Print_In_Color? = Druck in Farbe|C Private = Privat|V ProjectInformation = Projekt-Information Properties = Eigenschaften Really_Delete_ = Wirklich l\u00F6schen Really_change_the_database? = Datenbank wirklich \u00E4ndern? Really_delete_number_ = Sind Sie sicher, das sie die Nummer l\u00F6schen wollen ? Recurrence = Wiederholung Remembrance_Day = Volkstrauertag Reminder = Erinnerung Reminder_Notice = BORG Erinnerung Rename_State = Umbenennen Rename_Type = Umbenennen Reset_Task_States_to_Default = Standard-Definitionen wiederherstellen Resolution = Aufl\u00F6sung RunSQL = SQL-Befehl SMTP_Server = SMTP Server|S SMTP_password = SMTP Passwort (Optional) SMTP_user = SMTP Benutzer (Optional) Save = Speichern|S|ctrl S Save_Memo = Notiz speichern Screen_Name\: = Anzeigename:|M SearchString = Suchbegriff Search_Results = Suche Ergebnisse Select = \u00DCbernehmen Select_Memo_Warning = Notiz muss ausgew\u00E4hlt sein, um diesen Befehl auszuf\u00FChren Select_initial_state = Anfangszustand ausw\u00E4hlen Select_next_state = W\u00E4hle n\u00E4chsten Status aus Set_DueDate = Setze Enddatum Set_Initial_State = Anfangszustand setzen Show_Canadian_Holidays = Kanadische Feiertage zeigen|C Show_Private_Appointments = Private Termine zeigen|V Show_Public_Appointments = \u00D6ffentliche Termine zeigen|P Show_Stack_Trace = Zeige Stack-Trace Show_U.S._Holidays = US-Feiertage zeigen|U St._Patrick's_Day = St. Patrick's Tag Standard_Time = Standardzeit StartDate = Startdatum Start_Date = Startdatum|D Start_Time\: = Startzeit:|A State_Change = Zustandswechsel States = Status Status = Status|U SubTasks = Unteraufgaben TaskInformation = Aufgaben Task_Created = Aufgabe erstellt Task_State_Editor = Termintyp-Editor Task_Types = Aufgabentyp Text = Text Thanksgiving = Erntedankfest Thanksgiving_(Can) = Erntedankfest (Can) Time = Zeit Times = Anzahl|M To_Do = ToDo-Liste|T|ctrl T To_Do_List = ToDo-Liste|D Today = Heute|T|HOME Type = Typ|Y Use_24_hour_time_format = 24-Stunden-Ansicht|2 Use_system_beep = Systemlautsprecher UserColorScheme = Farben Vacation = Urlaub|C Valentine's_Day = Valentinstag Veteran's_Day = Veteranentag Victoria_Day = Victoria Day Web_Page\: = Homepage:|G Week_Starts_with_Monday = Woche startet Montags|M Week_View = Wochenansicht Week_View_End_Hour\:_ = Woche endet um:|E Week_View_Start_Hour\:_ = Woche startet um:|S WorkAddress = Adresse (Gesch\u00E4ftlich) Work_City\: = Ort:|I Work_Country\: = Land:|R Work_Phone = Telefon (Gesch\u00E4ftlich) Work_Phone\: = Telefon (Gesch\u00E4ftlich):|W Work_State\: = Bundesland:|E Work_Street_Address = Adresse, Hausnummer:|D Work_Zip_Code\: = PLZ:|O Your_Email_Address = Ihre E-Mail-Adresse|Y ]_does_not_exist = ] Existiert nicht ]_is_not_a_directory = ] Ist kein Verzeichnis __through__ = bis addcat = Neue Kategorie|A addresses = Adressen appearance = Erscheinungsbild apply = Speichern|A appointments = Termine appt_error = Das Termin-Fenster wird durch einen fr\u00FCheren Fehler geschlossen.\\nM\u00F6glicherweise wurde ein Termin aus dem To Do-Fenster gel\u00F6scht, w\u00E4hrend der Editor offen war. Falls nicht, BORG bitte neu starten. apptlist = Terminliste appttext = Termintext appttime = Zeit bad_db_2 = \\nWenn ein fehlerhaftes Datenbank-Verzeichnis den Fehler verursachte,\\n bitte 'JA' w\u00E4hlen, um es zu \u00E4ndern. biweekly = zweiw\u00F6chentlich black = schwarz blue = blau calShowSubtask = Unteraufgaben in Kalender/ToDo-Liste anzeigen calShowTask = Aufgaben in Kalender/ToDo-Liste anzeigen case_sensitive = Gro\u00DF-/Kleinschreibung beachten cat_choose = W\u00E4hle Kategorie catchooser = Kategorie-W\u00E4hler changedate = \u00C4ndere Datum|H chg_cat = Wechsele Kategorie choose_file = W\u00E4hle Datei choosecat = Kategorie zum Anzeigen ausw\u00E4hlen|C clear_all = Auswahl aufheben|C close_date = Enddatum close_proj_warn = Kann Projekt nicht beenden. Mindestens ein Untereintrag wurde noch nicht beendet. confirm_overwrite = \u00DCberschreiben best\u00E4tigen contact = Kontaktinformationen contributions_by = Dank f\u00FCr Beitr\u00E4ge geht an: copy_appt = Termin kopieren copyright = Copyright created = Erstellt custom_times_header = Popup-Erinnerungszeiten f\u00FCr daily = t\u00E4glich db_set_to = \\n\\nDas Datenbankverzeichnis ist gesetzt auf: del_tip = L\u00F6sche alle Vorkommen des sich wiederholenden Termins delcat_warn = Achtung! L\u00F6schen ALLER Termine und Aufgaben f\u00FCr die Kategorie delete_cat = L\u00F6sche Kategorie|D delete_cat_choose = W\u00E4hle Kategorie zum l\u00F6schen delete_selected = L\u00F6sche ausgew\u00E4hlte deleted = Gel\u00F6scht dlist = Tage ausw\u00E4hlen done = Fertig doo_tip = L\u00F6sche nur dieses Vorkommen des sich wiederholenden Termins dview_font = Tagesansicht edit_types = Typen und Stati bearbeiten|E elapsed_time = Verstrichene Tage empty_desc = Bitte eine Beschreibung eintragen enable_popups = Aktiviere PopUp-Erinnerungen\n|P enable_systray = Icon im System-Tray zeigen (Neustart erforderlich) enturl = URL eingeben: ep = Einstellungen|E expXML = XML: Export|E export = Export fonts = Schriftarten forever = Unendlich wiederholen|F green = gr\u00FCn h2info = H2 Information history = Verlauf hsqldb = HSQLDB hsqldbinfo = HSQLDB Information impXML = XML: Import|I impexpMenu = Import/Export|I jdbc = Generic JDBC locale = Land (Neustart erforderlich)|N min_aft_app = Minuten nach dem Termin min_bef_app = Minuten vor dem Termin minute_reminder = Minuten-Erinnerung minutes_ago = Minuten vergangen! misc = Verschiedenes monthly = monatlich (Datum) monthly_day = monatlich (Tag) mview_font = Ausdruck mwf = Mo-Mi-Fr navy = dunkelblau ndays = Jeden N Tag newDate\: = Neues Datum:|N noOutput = SQL-Befehl lieferte keine Ausgabe oder Fehler nummonths = Wieviele Monate drucken? once = einmalig open_subtasks = Kann Aufgabe nicht beenden, da mindestens eine Unteraufgaben noch nicht beendet ist. open_tasks = Offene Aufgaben overwrite_warning = Datei exitiert beretis. OK zum \u00FCberschreiben: popup_reminders = PopUp-Erinnerungen projdd_warning = Kann Projekt nicht speichern. Ein Untereintrag hat ein Enddatum nach dem des Projekts project = Projekt projects = Projekte recur_compat = Fehler: Wiederholung ist nicht kompatibel zum Termindatum red = rot remcat = Entferne ungenutzte Kategorien|R reminder_time = Zeitpunkt f\u00FCr Emailerinnerung|R repeating = Wiederholung reset_state_warning = Die pers\u00F6nlichen Definitionen f\u00FCr Aufgabentypen und -stati Einstellungen gel\u00F6scht.\\nAlle Definitionen werden in die Grundeinstellung zur\u00FCckgesetzt.\\nSind Sie sicher?\\n restore_defaults = Standardwerte wiederherstellen rlsnotes = Release Notes save_Def = Als Standard speichern sd_dd_warn = Fehler: Enddatum darf nicht vor dem Startdatum liegen sd_tip = Speichere aktuelle Werte als Termin-Standard select_all = Alle ausw\u00E4hlen|S select_appt = Bitte Termin ausw\u00E4hlen select_export_dir = Export-Verzeichnis w\u00E4hlen selectdb = Datenbank ist nicht gesetzt. Bitte setzen Sie Datenbankverzeichnis. send_reminder = Sende Erinnerungs-eMail|E set_def_font = Standardschriftart|D show_rpt_num = Zeige Wiederholungs-Nummer|W showdoy = Zeige Tage des Jahres an|Y socket_port = Socket Port (-1=deaktiviert, Neustart erforderlich) socket_warn = Socket Port muss eine Zahl sein splash = Startbildschirm anzeigen|S srch = Suche|S|F3 stackonerr = Zeige Stack-Trace in Fehlermeldungen|K stdd_warning = Kann Aufgabe nicht speichern. Das Enddatum einer Unteraufgabe liegt nach dem Enddatum der Aufgabe. strike = Durchstreichen stripecolor = Streifenfarbe der Tabelle subject = Betreff subtask = Unteraufgabe subtask_id = ID Unteraufgaben taskOptions = Aufgaben task_abbrev = Aufgaben-Nummern im Kalender anzeigen taskdd_warning = Es kann keine Aufgabe gespeichert werden, deren Enddatum nach dem des Projekts liegt tasks = Aufgaben todomissingdata = Bitte Text und Datum f\u00FCr Aufgabe eingeben. todoquickentry = Termin-Schnelleintrag * total_tasks = Alle Aufgaben truncate_appts = K\u00FCrze Termine in der Monatsansicht|T tth = Di-Do ucolortext1 = Benutzerdefinierte Farben in Aufgaben|T ucolortext10 = Feiertage ucolortext11 = Geburtstage ucolortext12 = Standard ucolortext13 = Feiertag ucolortext14 = Halbtags ucolortext15 = Urlaub ucolortext16 = Heute ucolortext17 = Wochenende ucolortext18 = Wochentag ucolortext2 = Markiere Aufgaben in Monatsansicht|M ucolortext4 = Textfarbe 1 ucolortext5 = Textfarbe 2 ucolortext6 = Textfarbe 3 ucolortext7 = Textfarbe 4 ucolortext8 = Textfarbe 5 ucolortext9 = Aufgaben uncategorized = user = Nutzer viewchglog = Change Log anzeigen|V weekdays = Montag-Freitag weekends = Samstag und Sonntag weekly = w\u00F6chentlich white = wei\u00DF wview_font = Wochenansicht yearly = j\u00E4hrlich ================================================ FILE: BORGCalendar/common/src/main/resources/borg_resource_es.properties ================================================ *****_NEW_APPT_***** = ***** NUEVA CITA ***** -db_argument_is_missing = -db argument is missing About = Acerca de... About_BORG = Sobre BORG Action = Acci\u00F3n Add = A\u00F1adir AddCat = Nueva Categor\u00EDa Add_Log = A\u00F1adir entrada de diario Add_New = A\u00F1adir Nuevo Add_State = A\u00F1adir Estado Add_Type = A\u00F1adir Tipo Address = Direcci\u00F3n Address_Book = Libreta Address_Book_Entry = Entrada de Libreta After = Despu\u00E9s All = Todos All_Open = Todo Abierto Apply_DB_Change = Applicar Cambio DB Appointment_Editor = Editor de Citas Appointment_Editor_for_ = Editar Cita ... Before = Antes Berger-Organizer_v = Berger-Organizer v Birthday = Cumplea\u00F1os Boxing_Day = Boxing Day Browse = Navegar Build_Time\:_ = \\nBuild Time:\\n CLOSED = Cerrado Canada_Day = D\u00EDa de Canad\u00E1 Cancel = Cancelar Categories = Categor\u00EDas Category = Categor\u00EDa Cell_Phone\: = Tel\u00E9fono Celular: Change = Cambiar CheckList = lista de verificaci\u00F3n CheckList_Name = Nombre de lista de verificaci\u00F3n CheckLists = Listas de verificaci\u00F3n Christmas = Navidad Civic_Holiday = Festivo civil Clear = Borrar Clear_DueDate = Borrar Fecha L\u00EDmite Clone = Clonar Close = Cerrar Closed = Cerrado Color = Color Columbus_Day = D\u00EDa de la Hispanidad Commonwealth_Day = D\u00EDa de la Commonwealth Company = Compa\u00F1\u00EDa Confirm_DB_Change = Confirmar Cambio de DB Confirm_Delete = Confirmar Borrado Copy = Copiar Copy_CheckList = Copiar Lista de verificaci\u00F3n Could_not_parse_times\:_ = No puedo analizar horas: DataBase_Directory = Directorio de Base de Datos|D DatabaseInformation = Info Base de Datos Date = Fecha Day_View = Vista de D\u00EDa Daylight_Savings_Time = Hora de Verano Days = D\u00EDas Days_Left = D\u00EDas Restantes Delete = Borrar Delete_Addresses = \u00BFBorrar Direcciones? Delete_CheckList = Borrar Listas de verificaci\u00F3n Delete_Memo = Borrar Memo Delete_One_Only = Borrar Uno Solo|Y Delete_State = Borrar Estado Delete_Type = Borrar Tipo Description = Descripci\u00F3n Directory_[ = Directorio [ Discard_Text? = \u00BFDescartar Texto? Dismiss = Descartar||alt X Done_(Delete) = Hecho (Borrado)|E Done_(No_Delete) = Hecho (No Borrado)|O Due = L\u00EDmite DueDate = Restante Due_Date = Fecha L\u00EDmite Edit = Editar EditNew = Editar Nuevo Edited_CheckList = La lista de verificaci\u00F3n actual se ha cambiado. \u00BFDescartar Cambios? Edited_Memo = El Memo accual se ha cambiado. \u00BFDescartar Cambios? Email = Email Email\: = Email: EmailParameters = Par\u00E1metros de Email Enable_Email = Habilitar Email EncryptOnSave = Encriptar al Guardar EncryptedItem = <<>> EncryptedItemShort = <> Encryption = Encriptar EndDate = Fecha Final EnterPasswordToDecrypt = Teclee la clave de encriptaci\u00F3n: Enter_CheckList_Name = Teclee el nombre de la nueva lista de verificaci\u00F3n Enter_Date = Introducir Fecha Enter_Log = Introducir entrade de Diario Enter_Memo_Name = Introducir nombre del nuevo memo Existing_CheckList = Ya existe una lista de verificaci\u00F3n con ese nombre Existing_Memo = Ya exite un memo con ese nombre Exit = Salir Father's_Day = D\u00EDa del Padre Fax\: = Fax: Filter\: = Filtro: Find = Buscar|B First = Primero First_Name\: = Nombre: Frequency = Frecuencia Go_To = Ir A Ground_Hog_Day = D\u00EDa de la Marmota Half_Day = Medio D\u00EDa Halloween = Sama\u00EDn Help = Ayuda Hide = Ocultar Hide_Pops = Ocultar todos los Recordatorios Holiday = Festivo HomeAddress = Direcci\u00F3n de Casa Home_City\: = Ciudad: Home_Country\: = Pa\u00EDs: Home_Phone = Tel. Casa Home_Phone\: = Tel Casa: Home_State\: = Estado: Home_Street_Address = Direcci\u00F3n Home_Zip_Code\: = Cod Postal: Hour = Hora Hours = Horas ISO_week_number = Usar numeraci\u00F3n semanal ISO 8601 Import = Importar Import_WARNING = ADVERTENCIA de importaci\u00F3n Importing_ = Importando Independence_Day = D\u00EDa de la Independencia Initializing = Iniciando Insert_Above = Insertar Antes Insert_Below = Insert Despu\u00C9s Item = Item Item_ = Item Item_\# = Item # KeyStore = Archivo de claves Key_Store_Not_Set = Archivo de claves no establecido. Para usar encriptaci\u00F3n debe establecerlo en preferencias. Labor_Day = Dia del Trabajo Labour_Day_(Can) = D\u00EDa del Trabajo (Can) Last = \u00DAltimo Last_Name\: = Apellidos: License = Licencia Logs = Diario Look_and_Feel\: = Apariencia: Martin_Luther_King_Day = D\u00EDa de Martin Luther King Memo_Name = Nombre de Memo Memorial_Day = Memorial Day Memos = Memos Minute = Minuto Minutes = Minutos Month_View = Vista de Mes Mother's_Day = Dia de la Madre Move_To_Following_Day = Mover al D\u00EDa Siguiente|M NEW_Item = Nuevo Item New_CheckList = Nueva lista de verificaci\u00F3n New_Memo = Nuevo Memo New_State = Nuevo Estado New_Task_Type = Nuevo tipo de tarea New_Theme_Name = Introduzca un nombre de tema New_Year's_Day = Nuevo A\u00F1o Next_States = Siguientes estados Nickname\: = Apodo: NoOpenState = Error: No se encuentra estado inicial para el tipo de tarea No_Key_Store = No puedo leer Archivo de Claves: No_Specific_Time = Sin Especif. Tiempo No_more = No hay m\u00E1s recordatorios para este apunte Not_Found_End = No encontado - fin de la b\u00FAsqueda... Notes = Notas Notice = Aviso Now = -- Ahora -- OK = OK OPEN = ABRIR Open = Abrir Open_Calendar = Abrir Calendario Options = Opciones PA = PA Pager\: = Busca: Password = Clave|P PasswordsDoNotMatch = Las claves no coinciden. Archivo de Claves no creado. Please_choose_File_to_Import_From = Elija fichero desde el cual Importar Please_choose_directory_to_place_XML_files = Elija directorio para poner los ficheros XML Please_enter_some_appointment_text = Introduzca el texto de la cita Please_select_a_state = Elija un estado Please_select_a_type = Elija un tipo Plugins = Plugins Popup_Times = Tiempos de recordatorio Presidents_Day = Presidents Day Pri = Pri Print = Imprimir Print_Chooser = Elegir Impresora Print_In_Color? = Imprimir en Color? Priority = Prioridad Private = Privado ProjectInformation = Informaci\u00F3n del Proyecto Properties = Propiedades Quick_Note = Nota R\u00E1pida Really_Delete_ = Borrar Realmente Really_change_the_database? = Cambiar la base de datos? Really_delete_number_ = Eliminar el numero Recurrence = Recurrencia Remembrance_Day = Remembrance Day Reminder = Recordatorio Reminder_Notice = Aviso de recordatorio BORG Remove = Borrar Rename_State = Renombrar Estado Rename_Type = Renombrar Tipo Reset_Task_States_to_Default = Resetear Tareas Resolution = Resoluci\u00F3n Restart_Warning = Debes reiniciar el programa para hacer efectivos los cambios. El programa finalizar\u00E1 ahora... RunSQL = Run SQL SMTP_Port = Puerto SMTP SMTP_Server = Servidor SMTP SMTP_password = Password SMTP (Opcional) SMTP_user = Usuario SMTP (Opcional) Save = Guardar Save_&_Close = Guardar y Cerrar|C| Save_CheckList = Guardar lista de verificaci\u00F3n Save_Memo = Guardar Memo Screen_Name\: = Nombre de pantalla: SearchString = Buscar Cadena Search_For = Buscar... Search_Next = Buscar Siguiente... Search_Results = Resultados B\u00FAsqueda Select = Seleccionar SelectKeyStore = Elija un Archivo de claves Select_CheckList_Warning = Para realizar esta acci\u00F3n debe seleccionar una lista de verificaci\u00F3n Select_Memo_Warning = Para realizar esta acci\u00F3n debe seleccionar un memo Select_initial_state = Elija estado inicial Select_next_state = Elija el siguiente estado Set_DueDate = Poner Fecha L\u00EDmite Set_Initial_State = Poner Estado Inicial Show_Canadian_Holidays = Ver Festivos CAN Show_Pops = Ver todos los recordatorios Show_Private_Appointments = Mostrar Citas Privadas Show_Public_Appointments = Mostrar Citas P\u00FAblicas Show_Stack_Trace = Show Stack Trace Show_U.S._Holidays = Ver Festivos US St._Patrick's_Day = D\u00EDa de St. Patrick Standard_Time = Horario de Invierno StartDate = Fecha Inicio StartToSysTray = Iniciar en el \u00E1rea de notificaci\u00F3n Start_Date = Fecha de Inicio Start_Time\: = Hora Inicio: State_Change = Cambio de Estado States = Estados Status = Estado SubTasks = SubTareas TaskInformation = Detalles de Tarea Task_Created = Tarea Creada Task_State_Editor = Editor de Estado de Tarea Task_Types = Tipos de Tarea Text = Texto Thanksgiving = Acci\u00F3n de Gracias Thanksgiving_(Can) = Acci\u00F3n de Gracias (Can) Theme = Tema Time = Hora Times = Veces To_Do = To-Do To_Do_List = Lista To-Do Today = Hoy Type = Tipo Uncheck_All = Desmarcar Todo Unhide_All = Ver Todo Until = Hasta Use_24_hour_time_format = Usar formato 24 H Use_system_beep = Usar campana del Sistema UserColorScheme = Esquema de color de Usuario Vacation = d\u00EDa libre Valentine's_Day = San Valentin Veteran's_Day = D\u00EDa del Veterano Victoria_Day = D\u00EDa de la Victoria Web_Page\: = P\u00E1gina Web: Week_Starts_with_Monday = Semana Empieza en Lunes Week_View = Vista Semanal Week_View_End_Hour\:_ = Hora Fin Vista Semanal: Week_View_Start_Hour\:_ = Hora Inicio Vista Semanal: WholeWord = Palabra Completa WorkAddress = Direcci\u00F3n de Trabajo Work_City\: = Ciudad: Work_Country\: = Pa\u00EDs: Work_Phone = Tel. Trabajo Work_Phone\: = Tel Trabajo: Work_State\: = Estado: Work_Street_Address = Direcci\u00F3n Work_Zip_Code\: = Cod Postal: Year_View = Vista de A\u00F1o Your_Email_Address = Direcci\u00F3n de EMail ]_does_not_exist = ] no existe ]_is_not_a_directory = ] no es un directorio __through__ = hasta addcat = A\u00F1adir Nueva Categor\u00EDa addresses = Direcciones all_undos = Mostrar toda la pila de Deshacer (Solo lectura) appearance = Apariencia apply = Aplicar|A appointment = Apunte appointments = Apuntes appt_error = La ventana de Apuntes se cerrar\u00E1 por un error previo. Puede que un apunte se haya borrado de la ventana To-Do mientas el editor estaba abierto. Si no es as\u00ED reinicia Borg apptlist = Lista de Citas appttext = Texto del Apunte appttime = Hora del Apunte att_folder_err = No puedo crear directorio del Anexo: att_not_found = No puedo encontrar objeto enlazado att_owner_null = No puedo guardar el enlance antes de que este nuevo item se guarde en la base de datos attach_file = Anexar Fichero backup_dir = Directorio de Copia de Seguridad backup_notice = Copia de Seguridad de los datos a bad_db_2 = \\nSi un directorio de Datos err\u00F3neo causa el error, click en SI para cambiarlo. bd_rem_days = D\u00EDas de recordatorio de Cumplea\u00F1os (-1 inhabilitar) beep_options = Sonido de recordatorio biweekly = quincenal black = negro blue = azul borg_backup = Fichero de copia de seguridad de BORG calShowSubtask = Mostrar subtareas en Calendario/To-do calShowTask = Mostrar tareas en Calendario/To-do case_sensitive = Case Sensitive cat_choose = Elige Categor\u00EDa catchooser = Elegir Categor\u00EDa changedate = Cambiar Fecha chg_cat = Cambiar Categor\u00EDa choose_file = Elegir Fichero choosecat = Elegir Categor\u00EDas clear_all = Limpiar Todo|C clear_undos = Limpiar Registro de deshacer close_date = Close Date close_proj_warn = No puedo cerrar proyecto. Al menos una tarea hija est\u00E1 sin cerrar. close_tabs = Cerrar todas las pesta\u00F1as collapse = Colapsar confirm_overwrite = Confirma Sobreescritura contact = Informaci\u00F3n de contacto contrib = Mohan Embar, Stepan Borodulin, Josie Stauffer, Meianandh, Travis Hein contributions_by = Thanks for Contributions to: copy_appt = Copiar Apunte copyright = Copyright create_key_store = Archivo de Claves no Existe. Escriba una clave para crearlo o pulse Cancelar. Debe escribir la clave dos veces para confirmar. created = Creado custom_times_header = Popup Reminder Times for daily = diario db_set_to = \\n\\nTu Base de Datos puesta a: db_time_error = The database shutdown timestamp is older than the shutdown timestamp in the BORG preferences. It is possible that BORG failed to properly write to the database when last shutdown. Please check for lost data, unless you have been using multiple databases. decrypt = Desencriptar default = por defecto defaultfg = color por defecto del_tip = Borrar todas las ocurrencias (repeticiones) de un apunte delcat_warn = AVISO! Borrando todos los Apuntes y Tareas para una categor\u00EDa delete_cat = Borrar Categor\u00EDa|D delete_cat_choose = Elija Categor\u00EDa para borrar delete_selected = Borrar Seleccionado deleted = Borrado dlist = Select Days dock = Dock done = hecho doo_tip = Borrar solo una ocurrencia de un evento que se repite. duration = Duraci\u00F3n dview_font = Vista de D\u00EDa edit_types = Editar Tipos de Tarea y Estados|E elapsed_time = Transcurrido empty_desc = Introduzca una descripci\u00F3n enable_popups = Habilitar recordatorio\n enable_systray = Habilitar Icono en el \u00C1rea de Notificaci\u00F3n (Hay que reiniciar) enable_tls = Habilitar TLS enturl = Introducir URL: ep = Editar Preferencias exit_no_backup = Salir sin crear copia de seguridad expXML = Exportar como XML... expand = Expandir export = Exportar export_prefs = Exportar Preferencias fonts = Tipos de Letra forever = Repetir gradient_appts = Dibujar Gradiente de Color en las Cajas de Apuntes green = verde h2info = H2 Information haslinks = Tiene Enlaces hide_strike = Ocultar Items Tachados history = Historia hsqldb = HSQLDB hsqldbinfo = HSQLDB Information impXML = Importar desde XML... impexpMenu = Importar / Exportar|I import_prefs = Importar Preferencias import_zip = Importar Copia de Seguridad Zip Completa jdbc = JDBC Gen\u00E9rico link_file = fichero Enlace links = Enlaces locale = Locale (requiere reinicio) memo = Memo min_aft_app = minutos despues de la cita min_bef_app = minutos antes de la cita minute_reminder = minuto recordatorio minutes_ago = minutos antes! misc = Miscel\u00E1nea monthly = mensual (fecha) monthly_day = mensual (dia) mview_font = Letra para Imprimir mwf = Lun-Mie-Vie navy = navy(EN) ndays = Cada N D\u00EDas newDate\: = Nueva Fecha: nmonths = Cada N Meses noOutput = SQL Command Returned no output or errors no_sound = sin sonido no_undos = Nada que Deshacer nummonths = N\u00FAmero de meses a Imprimir? nweeks = Cada N Semanas nyears = Cada N A\u00F1os on_shutdown = Al Terminar: once = una vez open_subtasks = No puedo cerrar Tarea, hay Subtareas sin cerrar open_tasks = Abrir Tareas overwrite_warning = Fichero Existe. OK para sobreescribirlo: parent = Padre please_confirm = Confirme Por Favor popup_reminders = Recordar con popup projchild_warning = No puedo guardar proyecto. Un proyecto hijo tiene fecha l\u00EDmite posterior a la del proyecto. projdd_warning = No puedo guardar proyecto. Una tarea hija tiene fecha l\u00EDmite posterior a la del proyecto. project = Proyecto project_tree = \u00C1rbol de Proyecto projects = Proyectos projpar_warning = No puedo guardar proyecto. Su fecha l\u00EDmite es posterior a la del proyecto padre. prompt_for_backup = Preguntar si se debe hacer copia de seguridad pw_time = Password Expiration (secs): recur_compat = Error: La recurrencia no es compatible con fecha de apunte red = rojo remcat = Borrar Categor\u00EDa reminder_list = Mostra todos los recordatorios en una sola ventana (requiere reinicio) reminder_time = Hora de recordatorio por Email|R repeating = Repetici\u00F3n reset_state_warning = Esto resetear\u00E1 cualquier cambio que haya hecho.\\n Esta seguro?\\n restore_defaults = restablecer valores por defecto rlsnotes = Notas de liberaci\u00F3n save_Def = Guardar valores por defecto sd_dd_warn = Error: La Fecha L\u00EDimite no puede ser menor que la inicial sd_tip = Guardar valores actuales como nuevos valores por defecto del Apunte select_all = Seleccionar Todo|S select_appt = Seleccione un Apunte select_export_dir = Seleccione un directorio de Exportaci\u00F3n select_link_type = Seleccione un tipo de objeto para el Enlace selectdb = Base de datos no establecida. Introduzca preferencias de la base de datos. send_reminder = Enviar correo recordatorio|E set_appt_font = Vista de Mes set_def_font = Fuente por defecto show_closed = Ver Proyectos Cerrados show_closed_tasks = Ver Tareas Cerradas show_date_in_systray = Mostrar fecha en el \u00E1rea de notificaci\u00F3n show_rpt_num = Show Repeat Number|W show_subtasks = Ver SubTareas show_task_reminders = Ver Recordatorios para Tareas, Proyectos y Subtareas show_task_status_in_tree = Ver N\u00FAmero de Tarea y Estado el el \u00C1rbol de Proyecto showdoy = Ver D\u00EDa del a\u00F1o|Y shutdown = Shutting Down....Please wait shutdown_options = Elija opci\u00F3n de cierre y copia de seguridad socket_port = Socket Port (-1=disabled, requires restart) socket_warn = Socket Port must be an integer sort_by_priority = Ordenar Apuntes por Prioridad splash = Mostrar Splash srch = Buscar stackonerr = Show Stack Trace Option on Error Dialogs|K stdd_warning = No puedo guardar tarea. Una subtarea tiene fecha l\u00EDmite posterior a la de la tarea. strike = tachar stripecolor = color lineas de tabla stsd_warning = No puedo guardar tarea. Una subtarea tiene fecha inicial anterior a la de la tarea. subject = Asunto subtask = Subtarea subtask_id = ID de Subtarea task = Tarea taskOptions = Opciones de Tarea task_abbrev = Mostrar N\u00FAmero de Tarea en Calendario taskdd_warning = No puedo guardar con fecha l\u00EDmite posterior a la del proyecto. tasks = Tareas todoOptions = Opciones de To-Do todo_option_auto_clear_text = Borrar campo de texto To Do al a\u00F1adir todo_option_auto_date_today = Fecha por defecto hoy todo_reminder_freq = Minutos entre recordatorios para to-dos sin hora todomissingdata = Introduzca textxo y fecha de To-Do. todoquickentry = Entrada To-Do * total_tasks = Total Tareas tray_bg = Color de fondo del Icono tray_fg = Color del Icono tray_font = Letra del Icono truncate_appts = Truncar Apuntes en Vista de Mes|T tth = Tues-Thurs ucolortext1 = Colores de usuario en la vista To-Do|T ucolortext10 = vacaciones ucolortext11 = Cumplea\u00F1os ucolortext12 = fondo por defecto ucolortext13 = festivo ucolortext14 = medio d\u00EDa ucolortext15 = d\u00EDa libre ucolortext16 = hoy ucolortext17 = fin de semana ucolortext18 = d\u00EDa de semana ucolortext2 = marcar to-do en vista de Mes|M ucolortext4 = color texto 1 ucolortext5 = color texto 2 ucolortext6 = color texto 3 ucolortext7 = color texto 4 ucolortext8 = color texto 5 ucolortext9 = tareas uncategorized = undo = Deshacer unknown = desconocido updated = Actualizado url = URL user = usuario viewchglog = Ver Change Log weekdays = Lunes-Viernes weekends = Sabado y Domingo weekly = semanal white = blanco write_backup_file = Copia de seguridad a fichero wview_font = Vista Semanal yearly = anual yview_font = Vista Anual ================================================ FILE: BORGCalendar/common/src/main/resources/borg_resource_es_AR.properties ================================================ *****_NEW_APPT_***** = ***** NUEVA CITA ***** -db_argument_is_missing = -falta argumento de BD About = Acerca de...|A About_BORG = Acerca de BORG Action = Acci\u00F3n|C Add = A\u00F1adir|A|INSERT AddCat = Nueva categor\u00EDa: Add_Log = A\u00F1adir entrada al registro Add_New = A\u00F1adir nuevo|N|INSERT Add_State = A\u00F1adir estado Add_Type = A\u00F1adir tipo Address = Direcci\u00F3n Address_Book = Libreta de direcciones|L|ctrl L Address_Book_Entry = Entrada de libreta de direcciones After = luego All = TODOS/AS All_Open = TODAS NO CERRADAS Apply_DB_Change = Applicar cambio BD|C Appointment_Editor = Editor de citas Appointment_Editor_for_ = Cita Before = antes Berger-Organizer_v = Berger-Organizer v Birthday = Cumplea\u00F1os|S Boxing_Day = Boxing Day Browse = Revisar|R Build_Time\:_ = \\nBuild Time: CLOSED = CERRADO Canada_Day = D\u00EDa de Canad\u00E1 Cancel = Cancelar Categories = Categor\u00EDas|R Category = Categor\u00EDa Cell_Phone\: = Tel\u00E9fono Celular: Change = Cambiar|M|ctrl E CheckList = Lista de verificaci\u00F3n CheckList_Name = Nombre lista de verificaci\u00F3n CheckLists = Listas de verificaci\u00F3n Christmas = Navidad Civic_Holiday = Fiesta c\u00EDvica Clear = Borrar Clear_DueDate = Borrar fecha vencim. Clone = Clonar|O|ctrl O Close = Cerrar|R|ctrl X Closed = Cerrado|R Color = Color|L Columbus_Day = 12 de octubre Commonwealth_Day = D\u00EDa del Commonwealth Company = Compa\u00F1\u00EDa|C Confirm_DB_Change = Confirmar cambio BD Confirm_Delete = Confirmar borrado Copy = Copiar Copy_CheckList = Copiar lista de verificaci\u00F3n Could_not_parse_times\:_ = No se pudo analizar repeticiones: DataBase_Directory = Directorio base de datos|D DatabaseInformation = Info base de datos Date = Fecha|F Day_View = Vista diaria Daylight_Savings_Time = Horario de verano Days = D\u00EDas Days_Left = D\u00EDas restantes Delete = Borrar|B|DELETE Delete_Addresses = Borrar direcci\u00F3n(es)? Delete_CheckList = Borrar lista de verificaci\u00F3n Delete_Memo = Borrar memo Delete_One_Only = Borrar ocurrencia actual|O Delete_State = Borrar estado Delete_Type = Borrar tipo Description = Descripci\u00F3n Directory_[ = Directorio [ Discard_Text? = Descartar texto? Dismiss = Cerrar||alt X Done_(Delete) = Hecho (borrar)|B Done_(No_Delete) = Hecho (no borrar)|O Due = Vencimiento DueDate = Fecha vencim. Due_Date = Fecha vencim.|V Edit = Editar|E EditNew = Editar nuevo Edited_CheckList = La lista de verificaci\u00F3n se modific\u00F3. Descartar cambios? Edited_Memo = El memo actual ha cambiado. Descartar cambios? Email = Email Email\: = Email:|E EmailParameters = Par\u00E1metros email Enable_Email = Habilitar email|E EncryptOnSave = Encriptar al guardar EncryptedItem = <<>> EncryptedItemShort = <> Encryption = Encriptaci\u00F3n EndDate = Fecha fin EnterPasswordToDecrypt = Clave de encriptaci\u00F3n: Enter_CheckList_Name = Entrar nombre de nueva lista de verificaci\u00F3n Enter_Date = Entrar fecha Enter_Log = Ingresar entrada de registro Enter_Memo_Name = Entre nombre para el nuevo Memo Existing_CheckList = Existe una lista de verificaci\u00F3n con ese nombre Existing_Memo = Ya existe un Memo con ese nombre Exit = Salir|S|alt X Father's_Day = D\u00EDa del Padre Fax\: = Fax:|A Filter\: = Filtro:|T Find = Buscar|B First = Nombre First_Name\: = Nombre:|N Frequency = Frecuencia Go_To = Ir a|I Ground_Hog_Day = Ground Hog Day Half_Day = Medio d\u00EDa Halloween = Halloween Help = Ayuda|Y|F1 Hide = Ocultar Hide_Pops = Ocultar recordatorios Holiday = Feriado HomeAddress = Direcci\u00F3n personal Home_City\: = Ciudad:|C Home_Country\: = Pa\u00EDs:|P Home_Phone = Tel. casa Home_Phone\: = Tel casa:|T Home_State\: = Estado/Prov.:|E Home_Street_Address = Direcci\u00F3n (calle)|D Home_Zip_Code\: = C\u00F3d. postal:|T Hour = hora Hours = horas ISO_week_number = Use numeraci\u00F3n de semanas ISO 8601 Import = Importar Import_WARNING = ADVERTENCIA de importaci\u00F3n Importing_ = Importando Independence_Day = Independence Day Initializing = Iniciando Insert_Above = Insertar arriba Insert_Below = Insertar abajo Item = Item Item_ = Item Item_\# = Item #|I KeyStore = Almac. claves Key_Store_Not_Set = Ubicaci\u00F3n almac. claves no definida. Para usar encriptaci\u00F3n, definirla en las opciones. Labor_Day = D\u00EDa del Trabajo Labour_Day_(Can) = D\u00EDa del Trabajo (Can) Last = Apellido Last_Name\: = Apellido:|L License = Licencia|L Logs = Registros Look_and_Feel\: = Apariencia:|N Martin_Luther_King_Day = D\u00EDa de Martin Luther King Memo_Name = Nombre Memo Memorial_Day = Memorial Day Memos = Memos Minute = minuto Minutes = minutos Month_View = Vista mensual Mother's_Day = D\u00EDa de la Madre Move_To_Following_Day = Mover al d\u00EDa siguiente NEW_Item = Nuevo Item New_CheckList = Nueva lista de verificaci\u00F3n New_Memo = Nuevo memo New_State = Nuevo estado New_Task_Type = Nuevo tipo de tarea New_Year's_Day = A\u00F1o Nuevo Next_States = Sig. estados Nickname\: = Apodo:|O NoOpenState = Error: no hay estado inicial para el tipo de tarea No_Key_Store = No se pudo leer almac. claves: No_Specific_Time = Sin hora espec\u00EDfica|P No_more = No seguir record\u00E1ndome esta cita Not_Found_End = No encontrado ? Fin b\u00FAsqueda... Notes = Notas Notice = Aviso Now = -- La cita es ahora -- OK = OK OPEN = ABIERTO Open = Abrir|R Open_Calendar = Abrir calendario|C Options = Opciones|O|ctrl O PA = PA|A Pager\: = Pager:|P Password = Clave acc.|L PasswordsDoNotMatch = Las claves no coinciden - Almac. claves no creado Please_choose_File_to_Import_From = Elija archivo desde el cual importar Please_choose_directory_to_place_XML_files = Elija directorio para archivos XML Please_enter_some_appointment_text = Introduzca el texto de la cita Please_select_a_state = Elija un estado Please_select_a_type = Elija un tipo Plugins = Plugins Popup_Times = Tiempos popup Presidents_Day = Presidents Day Pri = Pri|P Print = Imprimir|P|ctrl P Print_Chooser = Elecci\u00F3n impresora Print_In_Color? = Imprimir en color? Priority = Prioridad Private = Privado|V ProjectInformation = Informaci\u00F3n Proyecto Properties = Propiedades Quick_Note = Nota r\u00E1pida Really_Delete_ = Borrar realmente Really_change_the_database? = Cambiar base de datos? Really_delete_number_ = Realmente eliminar n\u00FAmero Recurrence = Recurrencia Remembrance_Day = Remembrance Day Reminder = Recordatorio Reminder_Notice = Aviso recordatorio de BORG Remove = Remover Rename_State = Renombrar estado Rename_Type = Renombrar tipo Reset_Task_States_to_Default = Reinicializar estados de tareas|R Resolution = Resoluci\u00F3n Restart_Warning = Debe reiniciar el programa para aplicar los cambios. El programa se cerrar\u00E1 ahora... RunSQL = Ejecutar SQL SMTP_Port = Puerto SMTP SMTP_Server = Servidor SMTP|S SMTP_password = Clave SMTP(opcional) SMTP_user = Usuario SMTP(opcional) Save = Guardar|U|ctrl S Save_&_Close = Guardar y cerrar Save_CheckList = Guardar lista de verificaci\u00F3n Save_Memo = Guardar Memo Screen_Name\: = Nombre pantalla:|M SearchString = Texto de b\u00FAsqueda Search_For = Buscar... Search_Next = Buscar pr\u00F3ximo... Search_Results = Resultados b\u00FAsqueda Select = Seleccionar SelectKeyStore = Seleccionar arch. almac. claves Select_CheckList_Warning = Una lista de verif. debe estar seleccionada para realizar esta acci\u00F3n Select_Memo_Warning = Un memo debe estar seleccionado para realizar esta acci\u00F3n Select_initial_state = Elegir estado inicial Select_next_state = Elegir estado pr\u00F3ximo Set_DueDate = Establecer fecha venc. Set_Initial_State = Establecer estado inicial Show_Canadian_Holidays = Ver feriados canadienses Show_Pops = Mostrar todos los recordatorios Show_Private_Appointments = Mostrar citas privadas|V Show_Public_Appointments = Mostrar citas p\u00FAblicas|P Show_Stack_Trace = Mostrar seguimiento pila Show_U.S._Holidays = Ver feriados USA|U St._Patrick's_Day = D\u00EDa de San Patricio Standard_Time = Standard Time StartDate = Fecha inicio StartToSysTray = Iniciar en bandeja de sistema Start_Date = Fecha inicio|F Start_Time\: = Hora inicio:|N State_Change = Cambio estado States = Estados Status = Estatus|U SubTasks = Subtareas TaskInformation = Info. de tarea Task_Created = Tarea creada Task_State_Editor = Editor de estado de tarea Task_Types = Tipos de tareas Text = Texto Thanksgiving = Thanksgiving Thanksgiving_(Can) = Thanksgiving (Can) Time = Hora Times = veces To_Do = Para hacer|H|ctrl H To_Do_List = Lista para hacer|L Today = Hoy|H|HOME Type = Tipo|P Uncheck_All = Desmarcar todo Unhide_All = Mostrar todo Until = Hasta Use_24_hour_time_format = Usar formato 24 Hs|2 Use_system_beep = Usar sonido de sistema UserColorScheme = Esquema de color de usuario Vacation = Vacaci\u00F3n Valentine's_Day = D\u00EDa de San Valent\u00EDn Veteran's_Day = D\u00EDa del Veterano Victoria_Day = Victoria Day Web_Page\: = P\u00E1g. Web:|G Week_Starts_with_Monday = Semana empieza en lunes|L Week_View = Vista semanal Week_View_End_Hour\:_ = Hora fin del d\u00EDa:|F Week_View_Start_Hour\:_ = Hora inicio del d\u00EDa:|I WholeWord = Palabra completa WorkAddress = Direcci\u00F3n laboral Work_City\: = Ciudad:|C Work_Country\: = Pa\u00EDs:|P Work_Phone = Tel. laboral Work_Phone\: = Tel. laboral:|L Work_State\: = Estado/prov.:|E Work_Street_Address = Direcci\u00F3n (calle)|D Work_Zip_Code\: = C\u00F3d. Postal (trabajo):|S Year_View = Vista anual Your_Email_Address = Su dir. de email|E ]_does_not_exist = ] no existe ]_is_not_a_directory = ] no es un directorio __through__ = hasta addcat = A\u00F1adir nueva categor\u00EDa|A addresses = Direcciones all_undos = Ver lista Deshacer (solo lectura) appearance = Apariencia apply = Aplicar|A appointment = Cita appointments = Citas appt_error = La ventana de cita se cerrar\u00E1 por un error previo. Quiz\u00E1 una cita fue quitada de la ventana Para Hacer cuando el editor estaba abierto. Si no, reinicie Borg apptlist = Lista citas appttext = Texto cita appttime = Hora cita att_folder_err = Imposible crear carpeta adj.: att_not_found = Imposible hallar objeto enlazado att_owner_null = No se puede guardar enlace antes de guardar el item en la BD attach_file = Arch. adjunto backup_dir = Carpeta backup backup_notice = Escriba datos backup a bad_db_2 = \\nSi un directorio de BD err\u00F3neo causa el error, click en OK para cambiarlo. beep_options = Sonido recordatorio biweekly = quincenal black = negro blue = azul borg_backup = Arch. backup de BORG calShowSubtask = Mostrar subtareas en Calendario/ParaHacer calShowTask = Mostrar tareas en Calendario/ParaHacer case_sensitive = Disting. may./min. cat_choose = Elegir categor\u00EDa catchooser = Selec. categor\u00EDa changedate = Cambiar fecha|M chg_cat = Cambiar categor\u00EDa choose_file = Elegir archivo choosecat = Elegir categor\u00EDas para mostrar|C clear_all = Borrar todo|B clear_undos = Borrar registro deshacer close_date = Fecha cierre close_proj_warn = Imposible cerrar proyecto. Hay tareas hijas abiertas. close_tabs = Cerrar todas las fichas collapse = Colapsar confirm_overwrite = Confirma sobreescritura contact = Info. Contacto contributions_by = Gracias por las contribuciones a: copy_appt = Copiar cita copyright = Copyright create_key_store = No existe archivo almac. claves. Entre una palabra clave para crear un nuevo archivo, o cancele. Debe entrar la palabra clave dos veces. created = Creado custom_times_header = Tiempos recordatorio popup para daily = diario db_set_to = \\n\\nSu dir. de DB se establece en: decrypt = Desencriptar default = defecto del_tip = Borrar todas las ocurrencias (repeticiones) de una cita delcat_warn = ADVERTENCIA ? Borrando TODAS las citas y tareas de la categor\u00EDa delete_cat = Borrar categor\u00EDa|B delete_cat_choose = Elegir categor\u00EDa para borrar delete_selected = Borrar seleccionados/as deleted = Borrado dlist = Selecionar d\u00EDas dock = Organizar ventana done = hecho doo_tip = Borrar s\u00F3lo la ocurrencia actual de una cita repetida duration = Duraci\u00F3n dview_font = Vista diaria edit_types = Editar tipos y estados de tareas|E elapsed_time = Transcurrido empty_desc = Entre una descripci\u00F3n enable_popups = Habilitar popups recordatorios enable_systray = Habilitar \u00EDcono bandeja de sistema (requiere reinicio) enable_tls = Habilitar TLS enturl = Entrar URL: ep = Editar preferencias|E exit_no_backup = Salir sin crear arch. backup expXML = Exportar XML|E expand = Expandir export = Exportar export_prefs = Exportar preferencias|X fonts = Fuentes forever = Repetir siempre gradient_appts = dibujar gradiente de color en cajas de citas|D green = verde h2info = Informaci\u00F3n H2 haslinks = Tiene enlaces hide_strike = Ocultar items tachados history = Historia hsqldb = HSQLDB hsqldbinfo = Informaci\u00F3n HSQLDB impXML = Importar XML|I impexpMenu = Importar/Exportar|I import_prefs = Importar preferencias|I import_zip = Import. arch. Zip backup completo jdbc = Generic JDBC link_file = Arch. enlaces links = Enlaces locale = Idioma y pa\u00EDs (requiere reinicio) memo = Memo min_aft_app = minutos luego de la cita min_bef_app = minutos antes de la cita minute_reminder = minutos para la cita minutes_ago = minutos pasaron desde la cita! misc = Varios monthly = mensual (fecha) monthly_day = mensual (dia) mview_font = Impr. mes mwf = lun-mie-vie navy = navy(EN) ndays = Cada N d\u00EDas newDate\: = Nueva fecha: noOutput = El comando SQL no trae salida o trae errores no_sound = sin sonido no_undos = Nada para deshacer nummonths = N\u00FAmero de meses a imprimir? on_shutdown = Al apagar: once = una vez open_subtasks = Imposible cerrar tarea, hay subtareas abiertas open_tasks = Tareas abiertas overwrite_warning = El arch. existe. OK para reescribirlo: parent = Padre please_confirm = Por favor confirme popup_reminders = Recordatorios popup projchild_warning = Imposible guardar proyecto. Un proyecto hijo tiene fecha venc. posterior a la del padre. projdd_warning = Imposible guardar proyecto. Una tarea hija tiene fecha venc. posterior a la del proyecto. project = Proyecto project_tree = Arbol de proyectos projects = Proyectos projpar_warning = Imposible guardar proyecto. Fecha de venc. posterior a la del proyecto padre. prompt_for_backup = Sugerir backup pw_time = Expiraci\u00F3n pal. clave (seg.): recur_compat = Error: recurrencia incompatible con fecha de cita red = rojo remcat = Borrar categor\u00EDas no usadas|R reminder_list = Ver todos los recordatorios en una ventana (requiere reinicio) reminder_time = Tiempo recordatorio email|R repeating = Repetida reset_state_warning = Se_perder\u00E1n las personalizaciones que Ud. haya hecho al modelo de tarea\\nEl modelo de tarea ser\u00E1 el que trae BORG por defecto.\\nContinuar?\\n restore_defaults = restaurar valores por defecto rlsnotes = Notas de versi\u00F3n save_Def = Guardar valores por def. sd_dd_warn = Error: fecha de venc. anterior a la de inicio sd_tip = Guardar valores actuales como valores por defecto para citas select_all = Selecionar todo|S select_appt = Selecione una cita select_export_dir = Elija directorio de export. select_link_type = Elija tipo de objeto para enlace selectdb = Base de datos no establecida. Introducir los ajustes de la BD. send_reminder = Enviar email recordatorio|E set_appt_font = Vista mensual set_def_font = Fuente por defecto show_closed = Mostrar proyectos cerrados show_closed_tasks = Mostrar tareas cerradas show_date_in_systray = Mostrar fecha en bandeja de sistema show_rpt_num = Mostrar n\u00FAm. repet. show_subtasks = Mostrar subtareas show_task_status_in_tree = Mostrar no./estado de tarea en \u00E1rbol de tareas showdoy = Mostrar d\u00EDa del a\u00F1o shutdown = Cerrando... Espere por favor shutdown_options = Selecione opci\u00F3\u00B4n de cierre y backup socket_port = Socket Port (-1=deshabilitado, requiere reinicio) socket_warn = Socket Port debe ser un entero sort_by_priority = Ordenar citas por prioridad splash = Mostrar pantalla bienvenida|S srch = Buscar|S|F3 stackonerr = Mostrar opci\u00F3n seguimiento de pila en di\u00E1logos de error stdd_warning = Imposible guardar tarea. Hay subtareas con fecha de venc. posterior a la de la tarea strike = tachado stripecolor = Table Stripe Color stsd_warning = Imposible guardar tarea. Hay subtareas con fecha de inicio anterior a la de la tarea subject = Tema subtask = Subtarea subtask_id = ID Subtarea task = Tarea taskOptions = Opciones de tarea task_abbrev = Mostrar nos. de tarea en Calendario taskdd_warning = Imposible guardar tarea con fecha de vencim. posterior a la del proyecto tasks = Tareas todoOptions = Opciones 'para hacer' todo_option_auto_clear_text = Borrar texto campo 'para hacer' al agregar todo_option_auto_date_today = D\u00EDa por defecto: hoy todo_reminder_freq = Minutos entre recordatorios de 'para hacer' sin hora todomissingdata = Escriba texto y fecha de 'para-hacer'. todoquickentry = Entrada r\u00E1pida 'para-hacer' total_tasks = Tareas totales truncate_appts = Truncar citas en vista mensual|T tth = mar-jue ucolortext1 = use colores de usuario en lista ParaHacer|H ucolortext10 = feriados ucolortext11 = cumplea\u00F1os ucolortext12 = defecto ucolortext13 = feriado ucolortext14 = medio d\u00EDa ucolortext15 = vacaci\u00F3n ucolortext16 = hoy ucolortext17 = fin de semana ucolortext18 = d\u00EDa de la sem. ucolortext2 = marcar ParaHacer en vista mens.|M ucolortext4 = color texto 1 ucolortext5 = color texto 2 ucolortext6 = color texto 3 ucolortext7 = color texto 4 ucolortext8 = color texto 5 ucolortext9 = tareas uncategorized = undo = Deshacer unknown = desconocido updated = Actualizado/a url = URL user = usuario viewchglog = Registro de cambios|V weekdays = lunes-viernes weekends = s\u00E1bado-domingo weekly = semanal white = blanco write_backup_file = Backup a un arch. wview_font = Vista semanal yearly = anual ================================================ FILE: BORGCalendar/common/src/main/resources/borg_resource_fr.properties ================================================ *****_NEW_APPT_***** = ***** NOUVEAU RDV ***** -db_argument_is_missing = l'argument -db manque About = A propos|A About_BORG = A propos de BORG Action = Action|C Add = Ajouter|A|INSERT AddCat = Entrer Nouvelle Cat\u00E9gorie: Add_Log = Ajouter Entr\u00E9e Log Add_New = Ajouter Nouveau|N|INSERT Add_State = Ajouter Etat Add_Type = Ajouter Type Address = Adresse Address_Book = Carnet d'adresses|A|ctrl A Address_Book_Entry = Entr\u00E9e Carnet d'adresses After = Apr\u00E8s All = Tout|A All_Open = Tout Ouvrir Apply_DB_Change = Appliquer Changement DB|C Appointment_Editor = Editeur de Rendez-vous Appointment_Editor_for_ = Editeur de Rendez-vous pour Before = Avant Berger-Organizer_v = Berger-Organizer v Birthday = Anniversaire|B Boxing_Day = Boxing Day Browse = Explorer|B Build_Time\:_ = \\nBuild Time: CLOSED = CLOSED Canada_Day = Canada Day Cancel = Annuler Categories = Cat\u00E9gories|R Category = Cat\u00E9gorie|R Cell_Phone\: = T\u00E9l\u00E9phone Cellulaire: Change = Changer|G|ctrl E Christmas = No\u00EBl Civic_Holiday = Civic Holiday Clear = Effacer Clear_DueDate = Effacer Ech\u00E9ance Clone = Cloner|O|ctrl O Close = Fermer|L|ctrl X Closed = Ferm\u00E9|L Color = Couleur|O Columbus_Day = Columbus Day Commonwealth_Day = Commonwealth Day Company = Soci\u00E9t\u00E9|C Confirm_DB_Change = Confirmer Changement DB Confirm_Delete = Confirmer Suppression Copy = Copier Could_not_parse_times\:_ = Impossible de parser les heures: DataBase_Directory = R\u00E9pertoire Base de donn\u00E9es|D DatabaseInformation = Information Base de donn\u00E9es Date = Date|D Day_View = Vue Journali\u00E8re Daylight_Savings_Time = Daylight Savings Time Days = Jours Days_Left = Jours Restants Delete = Supprimer|D|DELETE Delete_Addresses = Supprimer Adresse(s)? Delete_Memo = Supprimer Memo Delete_One_Only = Supprimer Seulement Un|Y Delete_State = Supprimer Etat Delete_Type = Supprimer Type Description = Description Directory_[ = R\u00E9pertoire [ Discard_Text? = Rejeter Texte? Dismiss = Annuler||alt X Done_(Delete) = Fait (Supprimer)|E Done_(No_Delete) = Fait (Ne pas Supprimer)|O DueDate = Ech\u00E9ance Due_Date = Ech\u00E9ance|T Edit = Editer|E EditNew = Editer Nouveau Edited_Memo = Memo en cours a \u00E9t\u00E9 modifi\u00E9. Rejeter Changements? Email = Email Email\: = Email:|E EmailParameters = Param\u00E8tres Email Enable_Email = Activer Email|E EndDate = Date de Fin Enter_Log = Entrer Log Enter_Memo_Name = Svp entrer le nom du nouveau memo Existing_Memo = Un memo existe d\u00E9j\u00E0 avec ce nom Exit = Exit|X|alt X Father's_Day = Father's Day Fax\: = Fax:|A Filter\: = Filtre:|T First = Pr\u00E9nom First_Name\: = Pr\u00E9nom:|F Frequency = Fr\u00E9quence|Q Go_To = Aller A|G Ground_Hog_Day = Ground Hog Day Half_Day = Demi-Journ\u00E9e|L Halloween = Halloween Help = Aide|H|F1 Hide_Pops = Masquer Tous les Memos Holiday = Vacance|I HomeAddress = Adresse Domicile Home_City\: = Ville:|C Home_Country\: = Pays:|U Home_Phone = T\u00E9l\u00E9phone Domicile Home_Phone\: = T\u00E9l\u00E9phone Domicile:|H Home_State\: = Etat:|T Home_Street_Address = Rue|A Home_Zip_Code\: = Code:|Z Hour = Heure Hours = Heures ISO_week_number = Utiliser Num\u00E9rotation ISO 8601 de la semaine Import = Importer Import_WARNING = Importer WARNING Importing_ = Importing Independence_Day = Independence Day Initializing = Initializing Item = Item Item_ = Item Item_\# = Item #|I Labor_Day = Labor Day Labour_Day_(Can) = Labour Day (Can) Last = Nom Last_Name\: = Nom:|L License = Licence|L Logs = Logs Look_and_Feel\: = Look and Feel:|L Martin_Luther_King_Day = Martin Luther King Day Memo_Name = Nom Memo Memorial_Day = Memorial Day Memos = Memos Minute = Minute Minutes = Minutes Month_View = Vue Mensuelle Mother's_Day = Mother's Day Move_To_Following_Day = D\u00E9placer au jour suivant|M NEW_Item = Nouvel Item New_Memo = Nouveau Memo New_State = Nouvel Etat New_Task_Type = Nouveau Type T\u00E2che New_Year's_Day = Nouveau Jour de l'Ann\u00E9e Next_States = Etats Suivants Nickname\: = Surnom:|N NoOpenState = Erreur: Pas d'\u00E9tat initial trouv\u00E9 pour le type t\u00E2che. No_Specific_Time = Pas d'heure sp\u00E9cifique|P No_more = Plus de rappels pour ce rendez-vous Notes = Notes Notice = Notice Now = -- Maintenant! -- OK = OK OPEN = OPEN Open = Ouvrir|N Open_Calendar = Ouvrir Calendrier|C Options = Options|O|ctrl O PA = PA|A Pager\: = Pager:|P Password = Mot de Passe|P Please_choose_File_to_Import_From = Svp choisir le Fichier d'o\u00F9 Importer Please_choose_directory_to_place_XML_files = Svp choisir le r\u00E9pertoire o\u00F9 placer les fichiers XML Please_enter_some_appointment_text = Svp entrer du texte pour le rendez-vous Please_select_a_state = Svp s\u00E9lectionner un \u00E9tat Please_select_a_type = Svp s\u00E9lectionner un type Popup_Times = Heures Popup Presidents_Day = Presidents Day Pri = Pri|P Print = Imprimer|P|ctrl P Print_Chooser = Choisir Imprimante Print_In_Color? = Couleur d'impression?|C Private = Priv\u00E9|V ProjectInformation = Information Projet Properties = Propri\u00E9t\u00E9s Really_Delete_ = Vraiment Supprimer Really_change_the_database? = Vraiment changer la base de donn\u00E9es? Really_delete_number_ = Vraiment supprimer # Recurrence = R\u00E9currence Remembrance_Day = Remembrance Day Reminder = Rappel Reminder_Notice = BORG Rappel Notice Rename_State = Renommer Etat Rename_Type = Renommer Type Reset_Task_States_to_Default = Re-initialiser Etats T\u00E2che par D\u00E9faut|R Resolution = R\u00E9solution RunSQL = Ex\u00E9cuter SQL SMTP_Port = Port SMTP SMTP_Server = Serveur SMTP|S SMTP_password = Mot de passe SMTP (Optionel) SMTP_user = Utilisateur SMTP (Optionel) Save = Sauvegarder|S|ctrl S Save_Memo = Sauvegarder Memo Screen_Name\: = Nom Ecran:|M SearchString = Rechercher Cha\u00EEne de caract\u00E8res Search_Results = R\u00E9sultats de la Recherche Select = S\u00E9lectionner Select_Memo_Warning = Un memo doit \u00EAtre s\u00E9lectionn\u00E9 pour effectuer cette action Select_initial_state = S\u00E9lectionner Etat Initial Select_next_state = S\u00E9lectionner \u00E9tat suivant Set_DueDate = Indiquer Ech\u00E9ance Set_Initial_State = Configurer Etat Initial Show_Canadian_Holidays = Show Canadian Holidays|C Show_Pops = Afficher Tous les Memos Show_Private_Appointments = Afficher Rendez-vous Priv\u00E9s|V Show_Public_Appointments = Afficher Rendez-vous Publics|P Show_Stack_Trace = Afficher Trace Pile Show_U.S._Holidays = Show U.S. Holidays|U St._Patrick's_Day = St. Patrick's Day Standard_Time = Standard Time StartDate = Date de d\u00E9but Start_Date = Date de D\u00E9but|D Start_Time\: = D\u00E9but:|A State_Change = Changer Etat States = Etats Status = Status|U SubTasks = Sous-t\u00E2ches TaskInformation = Information T\u00E2che Task_Created = T\u00E2che cr\u00E9\u00E9e Task_State_Editor = Editeur Etat T\u00E2che Task_Types = Types T\u00E2ches Text = Texte Thanksgiving = Thanksgiving Thanksgiving_(Can) = Thanksgiving (Can) Time = Time Times = Heures|M To_Do = ToDo|T|ctrl T To_Do_List = Liste ToDo|D Today = Aujourd'hui|T|HOME Type = Type|Y Use_24_hour_time_format = Utiliser le format 24 heures|2 Use_system_beep = Utiliser le Beep System UserColorScheme = User Color Scheme Vacation = Cong\u00E9|C Valentine's_Day = Valentine's Day Veteran's_Day = Veteran's Day Victoria_Day = Victoria Day Web_Page\: = Page Web:|G Week_Starts_with_Monday = Lundi D\u00E9but de Semaine|M Week_View = Vue Hebdomadaire Week_View_End_Hour\:_ = Heure Fin Journ\u00E9e:|E Week_View_Start_Hour\:_ = Heure D\u00E9but Journ\u00E9e:|S WorkAddress = Adresse Professionnelle Work_City\: = Ville:|I Work_Country\: = Pays:|R Work_Phone = T\u00E9l\u00E9phone Professionnel Work_Phone\: = T\u00E9l\u00E9phone Professionnel:|W Work_State\: = Etat:|E Work_Street_Address = Rue|D Work_Zip_Code\: = Code:|O Year_View = Vue Annuelle Your_Email_Address = Votre Adresse Email|Y ]_does_not_exist = ] n'existe pas ]_is_not_a_directory = ] n'est pas un r\u00E9pertoire __through__ = \u00E0 addcat = Ajouter Nouvelle Cat\u00E9gorie|A addresses = Adresses all_undos = Afficher la pile Annuler (lecture seule) appearance = Apparence apply = Appliquer|A appointment = Rendez-vous appointments = Rendez-vous appt_error = La fen\u00EAtre rendez-vous va se fermer \u00E0 cause d'une erreur pr\u00E9c\u00E9dente. Peut-\u00EAtre un rendez-vous a \u00E9t\u00E9 supprim\u00E9 de la fen\u00EAtre ToDo alors que l'\u00E9diteur \u00E9tait ouvert. Sinon, red\u00E9marrer Borg apptlist = Liste Rendez-vous appttext = Texte Rendez-vous appttime = Heure Rendez-vous att_folder_err = Impossible de cr\u00E9er un r\u00E9pertoire pour attachement: att_not_found = Impossible de trouver un objet li\u00E9 att_owner_null = Impossible de sauvegarder le lien avant que ce nouvel item ne soit sauvegarder dans la base de donn\u00E9es attach_file = Attacher Fichier backup_dir = R\u00E9pertoire Backup backup_notice = Ecrire donn\u00E9es backup dans bad_db_2 = \\nSi un mauvais r\u00E9pertoire de base de donn\u00E9es provoque l'erreur, svp click YES pour en changer. biweekly = bi-hebdommadaire black = noir blue = bleu calShowSubtask = Afficher Sous-t\u00E2ches dans Calendrier/Todo calShowTask = Afficher T\u00E2ches dans Calendrier/Todo case_sensitive = Sensible \u00E0 la Casse cat_choose = Choisir Cat\u00E9gorie catchooser = S\u00E9lectionneur Cat\u00E9gories changedate = Changer Date|H chg_cat = Changer Cat\u00E9gorie choose_file = Choisir Fichier choosecat = Choisir Cat\u00E9gories \u00E0 Afficher|C clear_all = Tout Effacer|C clear_undos = Effacer Log Annuler close_date = Date Fermeture close_proj_warn = Impossible de fermer le project. Au moins tant qu'une t\u00E2che fille n'est pas ferm\u00E9e. close_tabs = Fermer tous les onglets collapse = R\u00E9duire confirm_overwrite = Confirmer Ecrasement contact = Information Contact contributions_by = Remerciements pour leurs Contributions \u00E0: copy_appt = Copier Rendez-vous copyright = Copyright created = Cr\u00E9\u00E9 custom_times_header = Heures Popup Rappel pour daily = journalier db_set_to = \\n\\nVotre r\u00E9pertoire db est configur\u00E9 \u00E0: del_tip = Supprimer toutes les occurrences (r\u00E9p\u00E9titions) d'un rendez-vous delcat_warn = WARNING! TOUS les rendez-vous et t\u00E2ches sont en cours de suppression pour la cat\u00E9gorie delete_cat = Supprimer Cat\u00E9gorie|D delete_cat_choose = Choisir Cat\u00E9gorie \u00E0 Supprimer delete_selected = Supprimer S\u00E9lectionn\u00E9 deleted = Supprim\u00E9 dlist = S\u00E9lectionner Jours dock = Dock done = fait doo_tip = Supprimer seulement l'occurrence en cours d'un rendez-vous qui se r\u00E9p\u00E8te duration = Dur\u00E9e dview_font = Police Vue Journali\u00E8re edit_types = Editer Types et Etats de T\u00E2che|E elapsed_time = Ecoul\u00E9 empty_desc = Svp entrer une Description enable_popups = Activer Rappels Popup\n|P enable_systray = Activer System Tray Icon (n\u00E9cessite de red\u00E9marrer) enturl = Entrer URL: ep = Editer Pr\u00E9f\u00E9rences|E expXML = Exporter XML...|E expand = D\u00E9velopper export = Exporter export_prefs = Exporter Pr\u00E9f\u00E9rences fonts = Polices forever = R\u00E9p\u00E9ter ind\u00E9finiment |F green = vers h2info = Information H2 haslinks = A des Liens hide_strike = Masquer Items barr\u00E9s history = Historique hsqldb = HSQLDB hsqldbinfo = Information HSQLDB impXML = Importer XML...|I impexpMenu = Import / Export|I import_prefs = Importer Pr\u00E9f\u00E9rences jdbc = JDBC g\u00E9n\u00E9rique link_file = Fichier de liens links = Liens locale = Locale (n\u00E9cessite de red\u00E9marrer le programme)|O memo = Memo min_aft_app = minutes apr\u00E8s le rendez-vous min_bef_app = minutes avant le rendez-vous minute_reminder = rappel minute minutes_ago = Il y a plusieurs minutes! misc = Divers monthly = mensuel (date) monthly_day = mensuel (day) mview_font = Police d'impression mwf = Lun-Mer-Ven navy = navy ndays = Chaque N Jours newDate\: = Nouvelle Date:|N noOutput = Commande SQL ne renvoie rien ou des erreurs no_undos = Rien \u00E0 annuler nummonths = Nombre de Mois \u00E0 imprimer? once = une fois open_subtasks = Impossible de Fermer T\u00E2che, les Sous-t\u00E2ches ne sont pas toutes ferm\u00E9es open_tasks = T\u00E2ches Ouvertes overwrite_warning = Fichier Existe. OK pour Ecraser Fichier: parent = Parent please_confirm = Svp Confirmer popup_reminders = Rappels Popup projchild_warning = Impossible de sauvegarder le projet. Un projet fils a une \u00E9ch\u00E9ance post\u00E9rieure \u00E0 celle du projet projdd_warning = Impossible de sauvegarder le projet. Une t\u00E2che fille a une \u00E9ch\u00E9ance post\u00E9rieure \u00E0 celle du projet project = Projet project_tree = Arborescence Projet projects = Projets projpar_warning = Impossible de sauvegarder le projet. Son \u00E9ch\u00E9ance est post\u00E9rieure \u00E0 celle de son projet p\u00E8re recur_compat = Error: R\u00E9currence n'est pas compatible avec la date de rendez-vous red = rouge remcat = Supprimer Cat\u00E9gories inutilis\u00E9es|R reminder_time = Rappel Email Heure|R repeating = En cours de r\u00E9p\u00E9tition reset_state_warning = Ceci re-initialisera toutes les modifications effecu\u00E9es sur le mod\u00E8le t\u00E2che\\nLe mod\u00E8le t\u00E2che sera re-initialis\u00E9 \u00E0 son \u00E9tat par d\u00E9faut.\\nVoulez-vous vraiment le faire?\\n restore_defaults = r\u00E9tablir les d\u00E9fauts rlsnotes = Release Notes save_Def = Sauvegarder D\u00E9fauts sd_dd_warn = Error: Ech\u00E9ance ne peut pas \u00EAtre avant la Date de D\u00E9but sd_tip = Sauvegarder les valeurs en cours comme les valeurs par d\u00E9faut pour Rendez-vous select_all = Tout S\u00E9lectionner|S select_appt = Svp s\u00E9lectionner un rendez-vous select_export_dir = S\u00E9lectionner R\u00E9pertoire Export select_link_type = S\u00E9lectionner Type Objet pour Lien selectdb = La Base de donn\u00E9es n'est pas configur\u00E9e. Svp entrer la configuration de la base de donn\u00E9es. send_reminder = Envoyer Email Rappel|E set_def_font = Police par D\u00E9faut|D show_closed = Afficher Projets Termin\u00E9s show_rpt_num = Afficher Nombre de R\u00E9p\u00E9titions|W showdoy = Afficher Jour de L'ann\u00E9e|Y shutdown = Arr\u00EAt en cours....Attendre svp socket_port = Socket Port (-1=disactiv\u00E9, n\u00E9cessite un red\u00E9marrage) socket_warn = Socket Port doit \u00EAtre un entier splash = Afficher \u00E9cran splash|S srch = Rechercher|S|F3 stackonerr = Afficher Stack Trace Option sur Dialogues Erreur|K stdd_warning = Impossible de sauvegarder la t\u00E2che. Une sous-t\u00E2che a une \u00E9ch\u00E9ance post\u00E9rieure \u00E0 celle de la t\u00E2che strike = barr\u00E9 stripecolor = Table Trait de Couleur stsd_warning = Impossible de sauvegarder la t\u00E2che. Une sous-t\u00E2che a une date de d\u00E9but ant\u00E9rieure \u00E0 celle de la t\u00E2che subject = Sujet subtask = Sous-t\u00E2che subtask_id = Sous-t\u00E2che ID task = T\u00E2che taskOptions = Options T\u00E2che task_abbrev = Afficher Num\u00E9ros des T\u00E2ches sur le Calendrier taskdd_warning = Impossible de sauvegarder la t\u00E2che avec une \u00E9ch\u00E9ance post\u00E9rieure \u00E0 celle du projet tasks = T\u00E2ches todomissingdata = Svp entrer texte et date du todo. todoquickentry = Rapide Todo total_tasks = Total des t\u00E2ches truncate_appts = Couper Rendez-Vous dans Vue Mensuelle|T tth = Mar-Jeu ucolortext1 = utiliser les couleurs utilisateur dans la liste todo|T ucolortext10 = vacances ucolortext11 = anniversaires ucolortext12 = d\u00E9faut ucolortext13 = vacance ucolortext14 = demi-journ\u00E9e ucolortext15 = vacance ucolortext16 = aujourd'hui ucolortext17 = weekend ucolortext18 = jour semaine ucolortext2 = cocher todo dans vue mensuelle|M ucolortext4 = couleur texte 1 ucolortext5 = couleur texte 2 ucolortext6 = couleur texte 3 ucolortext7 = couleur texte 4 ucolortext8 = couleur texte 5 ucolortext9 = t\u00E2ches uncategorized = undo = Annuler unknown = inconnu updated = Mis \u00E0 Jour url = URL user = utilisateur viewchglog = Change Log|V weekdays = Lundi-Vendredi weekends = Samedi et Dimanche weekly = hebdomadaire white = blanc wview_font = Police Vue Hebdomadaire yearly = annuel ================================================ FILE: BORGCalendar/common/src/main/resources/borg_resource_it.properties ================================================ *****_NEW_APPT_***** = ***** NUOVO APPUNT ***** -db_argument_is_missing = -argomento mancante del db About = Informazioni su Borg About_BORG = About BORG Action = Azione Add = Aggiungi AddCat = Inserisci Nuova Categoria: Add_New = Aggiungi Nuovo Add_State = Aggiungi Stato Add_Type = Aggiungi Tipo Address = Indirizzo Address_Book = Agenda Address_Book_Entry = Inserimento in Agenda All = Tutte Apply_DB_Change = Applica Modifica al DB Appointment_Editor = Modifica Appuntamento Appointment_Editor_for_ = Modifica Appuntamento per Berger-Organizer_v = Berger-Organizer versione Birthday = Compleanno Boxing_Day = Boxing Day Browse = Esplora Build_Time\:_ = \\nData Prodotto: CLOSED = CHIUSO Canada_Day = Canada Day Cancel = Annulla Categories = Categorie Category = Categoria Cell_Phone\: = Cellulare: Change = Modifica CheckLists = Spunta Christmas = Natale Civic_Holiday = Vacanze Clone = Clona Close = Chiudi Closed = Chiuse Color = Colore Columbus_Day = Columbus Day Commonwealth_Day = Commonwealth Day Company = Azienda Confirm_DB_Change = Conferma Modifica DB Confirm_Delete = Conferma Cancellazione Copy = Copia Could_not_parse_times\:_ = Non posso analizzare le ripetizioni: DataBase_Directory = Cartella del DataBase DatabaseInformation = Informazione Database Date = Data Day_View = Vista Giorno Daylight_Savings_Time = Ora Legale Days = Giorni Days_Left = Giorni Rimanenti Delete = Cancella Delete_One_Only = Cancella Solo Uno Delete_State = Cancella Stato Delete_Type = Cancella Tipo Description = Descrizione Directory_[ = Directory [ Discard_Text? = Scarica Testo? Dismiss = Chiudi Done_(Delete) = Fatto (Cancella) Done_(No_Delete) = Fatto (Non Cancellare) DueDate = Data Fine Due_Date = Data Fine Edit = Modifica EditNew = Modifica Nuovo Email = Email Email\: = Email: EmailParameters = Parametri Email Enable_Email = Abilita Email EncryptOnSave = Cripta e Salva Encryption = Crittazione Exit = Esci Father's_Day = Festa del Pap\u00E0 Fax\: = Fax: Filter\: = Filtro: First = Nome First_Name\: = Nome: Frequency = Frequenza Go_To = Vai a Ground_Hog_Day = Giorno della Marmotta Half_Day = Mezza Giornata Halloween = Halloween Help = Aiuto Holiday = Festivo HomeAddress = Indirizzo Casa Home_City\: = Citt\u00E0: Home_Country\: = Paese: Home_Phone = Tel. Casa Home_Phone\: = Tel. Casa: Home_State\: = Provincia: Home_Street_Address = Indirizzo Home_Zip_Code\: = CAP: ISO_week_number = Usa ISO 8601 in Numerazione Settimanale Import = Importa Import_WARNING = Avvertimento Importazione Importing_ = Importazione Independence_Day = Giorno d'Indipendenza Initializing = Inizializzazione Item = Voce Item_ = Voce Item_\# = Voce nr. KeyStore = Chiave Labor_Day = Festa dei Lavoratori Labour_Day_(Can) = Festa dei Lavoratori (Can) Last = Cognome Last_Name\: = Cognome: License = Licenza Look_and_Feel\: = Aspetto grafico: Martin_Luther_King_Day = Martin Luther King Day Memorial_Day = Giorno della Memoria Memos = Memo Minutes = Minuti Month_View = Mostra Mese Mother's_Day = Festa della Mamma NEW_Item = Nuova voce New_State = Nuovo Stato New_Task_Type = Nuovo Tipo Attivit\u00E0 New_Year's_Day = Capodanno Next_States = Prossimo Stato Nickname\: = Nickname: No_Specific_Time = Ora non specificata Notes = Note Notice = Nota OK = OK Open = Aperte Open_Calendar = Apri Calendario Options = Opzioni PA = n. Pers. Pager\: = Cerca: Password = Password Please_choose_File_to_Import_From = Scegli il File da Importare Please_choose_directory_to_place_XML_files = Scegli la directory in cui esportare il File XML Please_enter_some_appointment_text = Inserisci del testo sull'appuntamento Please_select_a_state = Seleziona uno stato Please_select_a_type = Seleziona un tipo Popup_Times = Tempo per i Popup Presidents_Day = Giorno dei Presidenti Pri = Priorit\u00E0 Print = Stampa Print_Chooser = Scegli Stampante Print_In_Color? = Stampa a Colori? Priority = Priorit\u00E0 Private = Privato Properties = Propriet\u00E0 Really_Delete_ = Cancella Veramente Really_change_the_database? = Modificare Veramente il database? Really_delete_number_ = Eliminare veramente il numero Recurrence = Ricorrenza Remembrance_Day = Remembrance Day Rename_State = Rinomina Stato Rename_Type = Rinomina Tipo Reset_Task_States_to_Default = Resetta Stato Attivit\u00E0 al Default Resolution = Soluzione RunSQL = Esegui SQL SMTP_Server = SMTP Server Save = Salva Save_&_Close = Salva e Chiudi|C| Screen_Name\: = Nome visualizzato: Search_Results = Risultato Ricerca Select = Scegli Select_next_state = Seleziona prossimo stato Show_Canadian_Holidays = Mostra Vacanze Canadesi Show_Private_Appointments = Mostra Appuntamenti Privati Show_Public_Appointments = Mostra Appuntamenti Pubblici Show_Stack_Trace = Mostra Traccia della Lista Show_U.S._Holidays = Mostra vacanze U.S.A. St._Patrick's_Day = Festa di S. Patrizio Standard_Time = Orario Ufficiale StartDate = Data Inizio StartToSysTray = Inizia nella System Tray Start_Date = Data Inizio Start_Time\: = Ora Inizio: States = Stati Status = Stato SubTasks = Sotto-Attivit\u00E0 TaskInformation = Informazione Attivit\u00E0 Task_State_Editor = Editor Stato Attivit\u00E0 Task_Types = Tipi di Attivit\u00E0 Text = Testo Thanksgiving = Festa del Ringraziamento Thanksgiving_(Can) = Thanksgiving (Can) Time = Ora Times = Volte To_Do = Da-Fare To_Do_List = Lista Da-Fare Today = Oggi Type = Tipo Use_24_hour_time_format = Usa formato di 24 ore UserColorScheme = Colori Utente Vacation = Vacanza Valentine's_Day = San Valentino Veteran's_Day = Festa dei Veterani Victoria_Day = Giorno della Vittoria Web_Page\: = Pagina Web: Week_Starts_with_Monday = Settimana inizia dal Luned\u00EC Week_View = Vista Settimana Week_View_End_Hour\:_ = Settimana: ora finale Week_View_Start_Hour\:_ = Settimana: ora iniziale WorkAddress = Indirizzo Lavoro Work_City\: = Citt\u00E0: Work_Country\: = Paese: Work_Phone = Tel. Lavoro Work_Phone\: = Tel. Lavoro: Work_State\: = Provincia: Work_Street_Address = Indirizzo Work_Zip_Code\: = CAP: Year_View = Vista Anno Your_Email_Address = Tuo indirizzo Email ]_does_not_exist = ] non esiste ]_is_not_a_directory = ] non \u00E8 una directory __through__ = fino a addcat = Aggiungi Nuova Categoria appearance = Aspetto apply = Applica appt_error = La finestra degli appuntamenti verr\u00E0 chiusa a causa di un errore precedente. Forse un appuntamento \u00E8 stato rimosso dalla finestra Da-Fare mentre l'editor era ancora aperto. Altrimenti, riavvia Borg apptlist = Lista Appuntamenti appttext = Testo Appuntamento appttime = Ora Appuntamento attach_file = File Allegato backup_dir = Cartella dei Backup bad_db_2 = \\nSe la directory del DB causa un errore, clicca su YES per cambiarla. beep_options = Suono per pro-Memoria biweekly = bimensile black = nero blue = blue calShowSubtask = Mostra le Sottoattivit\u00E0 nel Calendario/Da-fare calShowTask = Mostra le Attivit\u00E0 nel Calendario/Da-fare catchooser = Scelta Categoria changedate = Cambia Data choose_file = Scegli File choosecat = Scegli Categorie da Visualizzare clear_all = Cancella tutto close_tabs = Chiudi tutti i Tabs contact = Informazione Contatto copy_appt = Copia Appuntamento daily = giornaliero db_set_to = \\n\\nDirectory DataBase impostata: del_tip = Cancella tutte le occorrenze (ripetizioni) di un appuntamento delete_cat = Cancella Categoria|D delete_cat_choose = Scegli Categoria da cancellare delete_selected = Cancella quello che hai Selezionato doo_tip = Cancella solo questa occorrenza dell'appuntamento ripetuto edit_types = Modifica Tipi e Stati di Attivit\u00E0 enable_popups = Abilita Popup per ProMemoria enable_systray = Abilita Icona nella System Tray (richiede restart) enable_tls = Abilita TLS enturl = Inserisci URL: ep = Preferenze expXML = Esporta XML... export_prefs = Esporta Preferenze forever = Ripeti Sempre gradient_appts = Usa Colore sfumato nel box Appuntamento green = verde h2info = Informazioni su H2 hide_strike = Nascondi le voci annullate hsqldbinfo = Informazioni su HSQLDB impXML = Importa XML... impexpMenu = Importa / Esporta import_prefs = Importa Preferenze import_zip = Importa tutto il file compresso di Backup jdbc = JDBC Generico link_file = Link file locale = Locale (richiede restart)|O min_aft_app = minuti dopo l'appuntamento min_bef_app = minuti prima dell'appuntamento misc = Varie monthly = mensile (data) monthly_day = mensile (giorno) mwf = Lun-Mer-Ven navy = marine ndays = Ogni N Giorni newDate\: = Nuova Data: no_undos = Nessun Undo nummonths = Numero di Mesi da stampare? once = una volta open_subtasks = Non si puo chiudere la Attivit\u00E0. Le SottoAttivit Attivit\u00E0 non sono tutte chiuse. open_tasks = Attivit\u00E0 aperte popup_reminders = Popup per ProMemoria project_tree = Albero Progetti projects = Progetti pw_time = Scadenza Password (in secondi): red = rosso remcat = Rimuovi Categoria Inutilizzata reminder_list = Mostra tutti i ProMemoria in una sola finestra (richiede restart) reset_state_warning = Questo resetter\u00E0 ogni modifica fatta prima, riportando allo stato di default\\nVuoi veramente questo?\\n restore_defaults = ripristina i defaults rlsnotes = Note di rilascio save_Def = Salva Default sd_tip = Salva valori attuali come nuovi Appuntamenti predefiniti select_all = Seleziona tutto select_export_dir = Seleziona la cartella su cui esportare selectdb = Database non impostato. Impostare DB. send_reminder = Email pro-Memoria|E set_def_font = Imposta Font di Default show_date_in_systray = Mostra Data nella System Tray show_task_status_in_tree = Mostra Numero e Stato Attivit\u00E0 nel Albero delle Attivit\u00E0 showdoy = Mostra Giorno dell'anno shutdown = In chiusura....attendere socket_port = Porta Socket (-1=disabilitata, richiede restart) sort_by_priority = Ordina Appuntamenti per Priorit\u00E0 splash = Mostra schermata di Borg srch = Ricerca stackonerr = Mostra Opzioni Attivit\u00E0 nel Dialogo Errore strike = linea-cancellazione stripecolor = Tavola colori a strisce subject = Oggetto taskOptions = Opzioni Attivit\u00E0 task_abbrev = Mostra solo il Numero nel Calendario tasks = Attivit\u00E0 todo_option_auto_clear_text = Pulisci il testo del Da-Fare quando aggiungi todo_option_auto_date_today = La data di default \u00E8 Oggi todomissingdata = Inserisci testo e data del Da-Fare. todoquickentry = Inserimento Rapido Da-Fare * total_tasks = Totale Attivit\u00E0 truncate_appts = Tronca Appuntamenti nella Vista Mese|T tth = Mar-Gio ucolortext1 = Colore utente in vista Da-Fare|T ucolortext10 = festivit\u00E0 ucolortext11 = Compleanni ucolortext12 = default ucolortext13 = festa ucolortext14 = mezzagiornata ucolortext15 = vacanze ucolortext16 = oggi ucolortext17 = fine settimana ucolortext18 = giorno della settimana ucolortext2 = Marca da-fare in vista mese|M ucolortext4 = colore testo 1 ucolortext5 = colore testo 2 ucolortext6 = colore testo 3 ucolortext7 = colore testo 4 ucolortext8 = colore testo 5 ucolortext9 = attivit\u00E0 uncategorized = unknown = sconosciuto viewchglog = CHANGELOG del programma weekdays = Luned\u00EC-Venerd\u00EC weekends = Sabato e Domenica weekly = settimanale white = bianco yearly = annuale ================================================ FILE: BORGCalendar/common/src/main/resources/borg_resource_nl.properties ================================================ *****_NEW_APPT_***** = Nieuwe Afspraak -db_argument_is_missing = -Datenbank-Wert fehlt About = Over... About_BORG = Over BORG Action = Aktie Add = Toevoegen AddCat = Nieuwe Categorie maken: Add_New = Nieuwe invoer Address = Adres Address_Book = Adressenboek Address_Book_Entry = Invoer Adressenboek All = Alles Apply_DB_Change = DB-verandering gebruiken Appointment_Editor = Afspraak-Editor Appointment_Editor_for_ = Afspraak planner voor Berger-Organizer_v = Berger-Organizer v Birthday = Geboortedatum Browse = Zoeken Build_Time\:_ = \\Creeer Tijd:\\n CLOSED = BEEINDIGD Categories = Categorie Category = Kategorie Cell_Phone\: = Mobiele Telefoon: Change = Wijzigen Christmas = Kerstmis Clone = Copieer Close = Sluiten Closed = Einde Color = Kleur Commonwealth_Day = Commonwealth Dag Company = Bedrijf Confirm_DB_Change = Database-wijziging bevestigen. Could_not_parse_times\:_ = Kon Tijden niet verwerken: DataBase_Directory = DB-Directory DatabaseInformation = Database-Informationen Date = Datum Daylight_Savings_Time = rest Dagtijd Days = Dagen Days_Left = Overige Dagen Delete = Verwijderen Delete_One_Only = verwijderen eenmalig Description = Beschrijving Directory_[ = Map [ Discard_Text? = Tekst verwijderen? Dismiss = Sluiten Done_(Delete) = gedaan (wissen) Done_(No_Delete) = gedaan (niet wissn) DueDate = Einddatum Due_Date = Einddatum Edit = Wijzigen EditNew = Nieuwe bewerking Email = Email Email\: = Email: EmailParameters = Email-Instellingen Enable_Email = Gebruik Email Exit = Afsluiten Fax\: = Fax: Filter\: = Filter: First = Voornaam First_Name\: = Voornaam: Frequency = Frequentie Go_To = Ga naar... Half_Day = Halve Dag Help = Help Holiday = Vrije dag HomeAddress = Adres thuis Home_City\: = Plaats: Home_Country\: = Staat: Home_Phone = Telefoon thuis Home_Phone\: = Telefoon thuis: Home_State\: = Land: Home_Street_Address = Straat Home_Zip_Code\: = Postcode: Import = Import Import_WARNING = Waarschuwing Importing_ = Importeer Initializing = Initialiseren Item = Invoer Item_ = Invoer Item_\# = Invoer # Last = Achternaam Last_Name\: = Achternaam: License = Licentie Look_and_Feel\: = Voorbeeld: Month_View = Maand overzicht NEW_Item = Nieuwe invoer New_Year's_Day = Nieuwjaar Nickname\: = Alias: No_Specific_Time = Geen vastgestelde tijd Notes = Opmerkingen Notice = Bericht OK = OK Open = Open Open_Calendar = Openen Kalender Options = Opties PA = Persoon Pager\: = Mobiel: Password = Paswoord Please_choose_File_to_Import_From = Geef import bestand aan Please_choose_directory_to_place_XML_files = Geef een verwijzing voor de XML-Data Please_enter_some_appointment_text = AUB Omschrijving Invoeren Pri = Prioriteit Print = Afdrukken Print_Chooser = Printer-Keuze Print_In_Color? = Kleur afdrukken? Private = Prive Properties = Eigenschappen Really_change_the_database? = Database wijzigen \u00E4ndern? Really_delete_number_ = Verwijder getal Reset_Task_States_to_Default = Plaats Opdrachten terug Resolution = Resolutie SMTP_Server = SMTP Server Save = Opslaan Screen_Name\: = Ingevoerde Naam: Search_Results = Zoek resultaat Select = Selecteren Show_Canadian_Holidays = Canadeese vrijedagen Show_Private_Appointments = Toon prive Afspraken Show_Public_Appointments = Toon algemene Afspraken Show_Stack_Trace = Toon Stack-Trace StartDate = Startdatum Start_Date = Startdatum Start_Time\: = Aanvangstijd: Status = Status TaskInformation = Opdracht-Informatie Text = Tekst Time = Tijd Times = Aantal To_Do = Te Doen To_Do_List = Te Doen overzicht Today = Vandaag Type = Type Use_24_hour_time_format = 24-Uur-Datum Vacation = Vakantie Web_Page\: = Webpagina: Week_Starts_with_Monday = Week start met Maandag Week_View = Weekoverzicht Week_View_End_Hour\:_ = Day eindigd om: Week_View_Start_Hour\:_ = Day start om: WorkAddress = Adres Werk Work_City\: = Plaats: Work_Country\: = Staat: Work_Phone = Telefoon werk Work_Phone\: = Telefon Werk: Work_State\: = Land: Work_Street_Address = Straat Work_Zip_Code\: = Postcode: Your_Email_Address = Uw Email-Adres ]_does_not_exist = ] niet gevonden ]_is_not_a_directory = ] is geen Map __through__ = tot addcat = Nieuwe Categorie appearance = Voorbeeld apply = Vervang appt_error = Het afspraken venster wordt door een eerdere fout gesloten.||Mogelijk werd een Afspraak uit het Te Doen venster gesloten terwijl de Editor open stond. Zo niet, BORG opnieuw starten. apptlist = Afsprakenlijst appttext = Afspraaktekst appttime = Tijdstip afspraak bad_db_2 = \\nAls een foutieve Database verwijzingde fout veroorzaakt,\\n AUB 'JA' kiezen, om verandering aan te brengen. biweekly = twee-weekelijks black = Zwart blue = Blauw catchooser = Categorie-Keuze changedate = Andere Datum choose_file = Kies Bestand choosecat = Categorie Kiezen contact = Kontakt-Informatie daily = dagelijks db_set_to = \\n\\nJe Database-Verwijzing is nu: del_tip = Verwijder alle voorkomende herhalingen van een Afspraak doo_tip = Verwijder enkel deze voorkomende en herhalende Afspraken enable_popups = Popup-reminder aktiveren\n enturl = URL invoeren: ep = Instellingen expXML = Exporteer XML... forever = Eindeloos herhalen green = Groen impXML = Importeer XML... impexpMenu = Import / Export locale = Land (herstarten aanbevolen) min_aft_app = Minuten na Afspraak min_bef_app = Minuten voor Afspraak misc = Overige monthly = maandelijks (Datum) monthly_day = maandelijks (Tag) mwf = Maan-Woens-Vrij navy = Donker Blauw newDate\: = Nieuwe Datum: nummonths = Hoeveel Maanden Afdrukken? once = eenmaal popup_reminders = Popup-reminder red = Rood remcat = Verwijder Categorie reset_state_warning = Verscheidene aangebrachte veranderingen worden terug gezet naar oorsponkelijke waarden.\\nTerugzetten?\\n save_Def = Als Basis opslaan sd_tip = Slaat de huidige waarden als basis voor nieuwe Afspraken op selectdb = Database is niet aangegeven. Geef plaats database op. set_def_font = Standaardlettertype instellen splash = Geef Startbeeld srch = Zoeken stackonerr = Geef Stack-Trace-Option aan bij foutmelding todomissingdata = Te Doen-Tekst en Datum invoeren. todoquickentry = Te Doen-Snelinvoer* tth = Dins-Donder uncategorized = viewchglog = Wijzig Log aanduiding weekdays = Maandag - Vrijdag weekends = Zaterdag en Zondag weekly = weekelijks white = Wit yearly = jaarlijks ================================================ FILE: BORGCalendar/common/src/main/resources/borg_resource_nl_BE.properties ================================================ *****_NEW_APPT_***** = ***** NIEUWE AFSPRAAK ***** -db_argument_is_missing = -db argument ontbreekt About = Over About_BORG = Over BORG Action = Actie Add = Toevoegen AddCat = Nieuw categorie maken: Add_Log = Logboek Item toevoegen Add_New = Nieuwe invoer Add_State = Toestand toevoegen Add_Type = Type toevoegen Address = Adres Address_Book = Adresboek Address_Book_Entry = Invoer adresboek After = Na All = Alles All_Open = Allemaal geopend Apply_DB_Change = Database-wijziging toepassen Appointment_Editor = Afspraak-editor Appointment_Editor_for_ = Afspraakplanner voor Before = Voor Berger-Organizer_v = Berger-Organizer v Birthday = Verjaardag Boxing_Day = Tweede kerstdag Browse = Zoeken Build_Time\:_ = \\nBuild Datum & Tijd:\\n CLOSED = AFGEWERKT Cancel = Annuleer Categories = Categorie Category = Categorie Cell_Phone\: = Mobiele Telefoon: Change = Wijzigen Christmas = Kerstmis Clear_DueDate = Vervaldag wissen Clone = Dupliceren Close = Afsluiten Closed = Afgewerkt Color = Kleur Company = Bedrijf Confirm_DB_Change = database-wijziging bevestigen Confirm_Delete = Bevestig verwijderen Copy = Kopi\u00EBren Could_not_parse_times\:_ = Tijden niet verwerkt: DataBase_Directory = Database map DatabaseInformation = Database informatie Date = Datum Day_View = Dagoverzicht Daylight_Savings_Time = Zomertijd Days_Left = Resttijd Delete = Verwijderen Delete_Memo = Wis Memo Delete_One_Only = Eenmalig verwijderen Delete_State = Toestand verwijderen Delete_Type = Type verwijderen Description = Beschrijving Directory_[ = Map [ Discard_Text? = Tekst verwijderen? Dismiss = Sluiten Done_(Delete) = Gedaan (wissen) Done_(No_Delete) = Gedaan (niet wissen) DueDate = Vervaldag Due_Date = Vervaldag Edit = Wijzigen EditNew = Nieuw Email = Email Email\: = Email: EmailParameters = Email instellingen Enable_Email = Email gebruiken EndDate = Einddatum Enter_Log = Logboek Item openen Enter_Memo_Name = Geef een naam op voor de nieuwe memo Existing_Memo = Er bestaat reeds een memo met deze naam Exit = Sluiten Father's_Day = Vaderdag Fax\: = Fax: Filter\: = Filter: First = Voornaam First_Name\: = Voornaam: Frequency = Frequentie Go_To = Ga naar... Half_Day = Halve dag Halloween = Halloween Help = Help Holiday = Feestdag HomeAddress = Adres thuis Home_City\: = Plaats: Home_Country\: = Land: Home_Phone = Telefoon thuis Home_Phone\: = Telefoon thuis: Home_State\: = Provincie: Home_Street_Address = Straat Home_Zip_Code\: = Postcode: Hour = Uur Hours = Uren ISO_week_number = Gebruik ISO 8601 voor Weeknummering Import = Importeer Import_WARNING = Import WAARSCHUWING Importing_ = Importeer Independence_Day = Onafhankelijkheidsdag Initializing = Initialiseren Item = Item Item_ = Invoer Item_\# = Item # Labor_Day = Dag van de arbeid Labour_Day_(Can) = Dag van de arbeid (Can) Last = Familienaam Last_Name\: = Familienaam: License = Gebruiksovereenkomst Look_and_Feel\: = Uitzicht: Memo_Name = Memo Naam Memos = Memo's Minute = Minuut Minutes = Minuten Month_View = Maandoverzicht Mother's_Day = Moederdag Move_To_Following_Day = Zet naar volgende dag|Z NEW_Item = NIEUWE invoer New_Memo = Nieuwe Memo New_State = Nieuwe toestand New_Task_Type = Nieuw taaktype New_Year's_Day = Nieuwjaar Next_States = Volgende toestand Nickname\: = Bijnaam: NoOpenState = Error: Geen standaardwaarde gevonden voor type taak No_Specific_Time = Geen tijd opgegeven No_more = Geen herinneringen meer voor deze afspraak Notes = Notas Notice = Bericht Now = -- Nu! -- OK = OK OPEN = OPEN Open = Open Open_Calendar = Open kalender Options = Opties PA = Persoon Pager\: = Mobiel: Password = Paswoord Please_choose_File_to_Import_From = Kies te importeren bestand Please_choose_directory_to_place_XML_files = Kies een doelmap voor de XML-bestanden Please_enter_some_appointment_text = Omschrijving invoeren A.U.B. Please_select_a_state = aub een toestand kiezen Please_select_a_type = Een type selecteren aub Popup_Times = Popup tijden Pri = Prioriteit Print = Afdrukken Print_Chooser = Printer-Keuze Print_In_Color? = Printen in kleur Private = Priv\u00E9 ProjectInformation = Project Informatie Properties = Eigenschappen Really_Delete_ = Echt verwijderen? Really_change_the_database? = de database echt wijzigen? Really_delete_number_ = Item # echt verwijderen? Recurrence = Terugkerend Reminder = Herinnering Reminder_Notice = Tekst herinnering individuele afspraak Rename_State = hernoem toestand Rename_Type = Type hernoemen Reset_Task_States_to_Default = Standaardwaarden taken herstellen Resolution = Oplossing RunSQL = SQL uitvoeren SMTP_Server = SMTP Server SMTP_password = SMTP Paswoord (Optioneel) SMTP_user = SMTP gebruiker (Optioneel) Save = Opslaan Save_Memo = Bewaar Memo Screen_Name\: = Alias: SearchString = Zoekterm Search_Results = Zoekresultaten Select = Selecteren Select_Memo_Warning = Om deze opdracht uit te voeren, moet een memo worden geselecteerd. Select_initial_state = Selecteer standaardwaarde Select_next_state = Volgende toestand selecteren Set_DueDate = Vervaldag instellen Set_Initial_State = Stel standaardwaarde in Show_Canadian_Holidays = Toon Canadese feestdagen Show_Private_Appointments = Toon priv\u00E9 afspraken Show_Public_Appointments = Toon gewone afspraken Show_Stack_Trace = Toon Stack Trace Show_U.S._Holidays = Toon U.S. feestdagen Standard_Time = Standaard tijd StartDate = Begindatum Start_Date = Begindatum Start_Time\: = Start Tijd: State_Change = Statuswijziging States = Toestand Status = Status SubTasks = SubTaken TaskInformation = Opdracht informatie Task_Created = Taak aangemaakt Task_State_Editor = Taak toestand editor Task_Types = Taaktypes Text = Tekst Time = Tijd Times = Aantal To_Do = To Do To_Do_List = To Do Lijst Today = Vandaag Type = Type Use_24_hour_time_format = Gebruik 24 uur-tijdsaanduiding Use_system_beep = Gebruik systeem biep UserColorScheme = Eigen kleurinstellingen Vacation = Vakantie Valentine's_Day = Valentijnsdag Web_Page\: = Web Page: Week_Starts_with_Monday = Week start op maandag Week_View = Weekoverzicht Week_View_End_Hour\:_ = Week overzicht eind uur: Week_View_Start_Hour\:_ = Week overzicht start uur: WorkAddress = Adres werk Work_City\: = Plaats: Work_Country\: = Land: Work_Phone = Telefoon werk Work_Phone\: = Telefoon werk: Work_State\: = Provincie: Work_Street_Address = Straat Work_Zip_Code\: = Postcode: Your_Email_Address = Uw Email adres ]_does_not_exist = ] bestaat niet ]_is_not_a_directory = ] is geen map __through__ = tot addcat = Nieuwe categorie addresses = Adressen appearance = Voorkomen apply = Toepassen appointments = Afspraken appt_error = Het afspraken venster wordt door een eerdere fout gesloten.||Mogelijk werd een Afspraak uit het To Do venster gesloten terwijl de Editor open stond. Zo niet, BORG opnieuw starten. apptlist = Afsprakenlijst appttext = Uitleg bij de afspraak appttime = Afspraaktijd bad_db_2 = \\nAls een verkeerde bestandverwijzing de fout veroorzaakt, AUB 'JA' kiezen om te wijzigen. biweekly = tweewekelijks black = zwart blue = blauw calShowSubtask = Toon Subtaken in Kalender/To Do calShowTask = Toon taken in Kalender/To Do case_sensitive = Hoofdlettergevoelig cat_choose = Kies categorie catchooser = Categorie kiezen changedate = Datum aanpassen chg_cat = Verander van categorie choose_file = Kies bestand choosecat = Te tonen categorie(n) kiezen clear_all = Alles verwijderen close_date = Sluit datum close_proj_warn = Kan het project niet sluiten. Minstens \u00E9\u00E9n deeltaak is niet gesloten. confirm_overwrite = bevestig overschrijven contact = Contact-informatie contributions_by = Werkten mee aan dit programma: copy_appt = Afspraak kopi\u00EBren copyright = Auteursrecht created = Aangemaakt custom_times_header = Popup herinneringstijd voor daily = dagelijks db_set_to = \\n\\nGebruikte bestandsmap: del_tip = Verwijder afspraak / alle items van een wederkerende afspraak delcat_warn = WAARSCHUWING! ALLE afspraken en taken voor deze categorie verwijderen delete_cat = Categorie verwijderen delete_cat_choose = Kies Categorie om te verwijderen delete_selected = Geselecteerd verwijderen deleted = Gewist dlist = Selecteer dagen done = afgewerkt doo_tip = Verwijder een wederkerende afspraak ENKEL op de GESELECTEERDE DATUM dview_font = Dagoverzicht lettertype edit_types = Taaktypes en -toestand bewerken elapsed_time = Verlopen tijd empty_desc = Geef een beschrijving op a.u.b. enable_popups = Popup herinnering toestaan\n enable_systray = Icoon systeemvak inschakelen (Herstart noodzakelijk) enturl = Een URL ingeven: ep = Voorkeuren bewerken expXML = XML exporteren... export = Exporteren fonts = Lettertypes forever = Eeuwig herhalen green = groen h2info = H2 Informatie history = Geschiedenis hsqldb = HSQLDB hsqldbinfo = HSQLDB Informatie impXML = XML importeren... impexpMenu = Importeer / Exporteer jdbc = Generic JDBC locale = Land (vereist herstart van het programma) min_aft_app = minuten na de afspraak min_bef_app = minuten voor de afspraak minute_reminder = minuten herinnering minutes_ago = minuten terug! misc = Overige monthly = maandelijks (datum) monthly_day = maandelijks (dag) mview_font = Maandoverzicht (Print) lettertype mwf = Maan-, woens- & vrijdag navy = marine ndays = Om de <#> dagen newDate\: = Nieuwe Datum: noOutput = SQL Commando resultaat leeg of fouten nummonths = Aantal maanden te printen? once = \u00E9\u00E9nmalig open_subtasks = Kan de taak niet afsluiten, Deeltaken zijn niet allemaal afgesloten open_tasks = Open Taken overwrite_warning = Bestand bestaat. OK om bestand te overschrijven: popup_reminders = Popup herinnering projdd_warning = Kan het project niet bewaren. Vervaldag van een deeltaak later dan deze van het project. project = Project projects = Projecten recur_compat = Error: Herhaling is niet compatibel met de afspraakdatum red = rood remcat = Verwijder ongebruikte categorie(n) reminder_time = Tijd Email herinnering repeating = Terugkerend reset_state_warning = Dit reset alle wijzigingen die je aan het taakmodel hebt aangebracht.\\nDe veranderingen worden teruggezet naar de oorspronkelijke waarden.\\nWil je werkelijk doorgaan?\\n restore_defaults = Standaardwaarden herstellen rlsnotes = Versie info save_Def = Bewaar als standaard sd_dd_warn = Fout: Vervaldag kan niet voor de startdatum liggen sd_tip = Bewaar huidige waarden als nieuwe standaard voor afspraken select_all = Alles Selecteren select_appt = Selecteer een afspraak select_export_dir = Selecteer export-map selectdb = Database is niet opgegeven. De database instellingen opgeven aub. send_reminder = Email herinnering zenden set_def_font = Standaard lettertype show_rpt_num = Toon herhaal nummer showdoy = Toon dag van het jaar socket_port = Socket Port (-1=uitgeschakeld, vereist herstart) socket_warn = Socket Port moet geheel getal zijn splash = Toon opstartscherm srch = Zoek stackonerr = Toon Stack Trace opties en -foutmeldingen stdd_warning = Kan de taak niet bewaren. Een deeltaak heeft een vervaldag, later dan de vervaldag van de taak. strike = doorstreept stripecolor = Gekleurde streep in lijsten subject = Onderwerp subtask = Deeltaak subtask_id = Deeltaak ID taskOptions = Taakopties task_abbrev = Toon het taaknummer in de kalender taskdd_warning = Kan de taak niet bewaren. Vervaldag van de taak later dan deze van het project. tasks = Taken todomissingdata = AUB zowel To Do tekst als datum invoeren. todoquickentry = To Do Snelinvoer * total_tasks = Totaal Taken truncate_appts = Afspraken in maandoverzicht splitsen tth = Dins- & donderdag ucolortext1 = Gebruik ingestelde kleuren in To Do lijst|T ucolortext10 = Feestdagen ucolortext11 = Verjaardagen ucolortext12 = Standaard ucolortext13 = Feestdag ucolortext14 = Halve Dag ucolortext15 = Vakantie ucolortext16 = Vandaag ucolortext17 = Weekend ucolortext18 = Weekdag ucolortext2 = Markeer To Do in maandoverzicht|M ucolortext4 = Tekstkleur 1 ucolortext5 = Tekstkleur 2 ucolortext6 = Tekstkleur 3 ucolortext7 = Tekstkleur 4 ucolortext8 = Tekstkleur 5 ucolortext9 = taken uncategorized = user = gebruiker viewchglog = Bekijk log wijzigingen weekdays = Maandag tot vrijdag weekends = Zaterdag en zondag weekly = wekelijks white = wit wview_font = Weekoverzicht lettertype yearly = jaarlijks ================================================ FILE: BORGCalendar/common/src/main/resources/borg_resource_pl.properties ================================================ *****_NEW_APPT_***** = ***** NOWE ZDA\u017BENIE ***** -db_argument_is_missing = -db brakuje argumentu About = O programie About_BORG = O BORG Action = Dzia\u0142anie Add = Dodaj AddCat = Wprowad\u017A now\u0105 kategori\u0119: Add_New = Dodaj nowe Add_State = Dodaj stan Add_Type = Dodaj typ Address = Adres Address_Book = Ksi\u0105\u017Cka adresowa Address_Book_Entry = Wpis ksia\u017Cki adresowej All = Wszystkie Apply_DB_Change = Zastosuj zmiany do DB Appointment_Editor = Edytor zdarze\u0144 Appointment_Editor_for_ = Edytor zdarze\u0144 dla Berger-Organizer_v = Berger-Organizer v Birthday = Urodziny Boxing_Day = Boxing Day Browse = Przegl\u0105daj Build_Time\:_ = \\nCzas Build'a:\\n CLOSED = ZAMKNI\u011ATE Canada_Day = Canada Day Cancel = Anuluj Categories = Kategorie Category = Kategoria Cell_Phone\: = Kom\u00F3rka: Change = Zmie\u0144 Christmas = Bo\u017Ce narodzenie Civic_Holiday = Civic Holiday Clone = Klonuj Close = Zamknij Closed = Zamkni\u0119te Color = Kolor Columbus_Day = Columbus Day Commonwealth_Day = Commonwealth Day Company = Firma Confirm_DB_Change = Potwierd\u017A zmian\u0119 DB Confirm_Delete = Potwierd\u017A usuwanie Could_not_parse_times\:_ = Nie mo\u017Cna zanalizowa\u0107 czas\u00F3w (Could not parse times): DataBase_Directory = Katalog bazy danych DatabaseInformation = Informacje bazy danych Date = Data Day_View = Widok dnia Daylight_Savings_Time = Daylight Savings Time Days_Left = Pozosta\u0142o Dni Delete = Skasuj Delete_One_Only = Skasuj tylko jedno Delete_State = Skasuj stan Delete_Type = Skasuj typ Description = Opis Directory_[ = Katalog [ Discard_Text? = Odrzuci\u0107 Tekst? Dismiss = Odrzu\u0107 Done_(Delete) = Zrobione (Kasowa\u0107) Done_(No_Delete) = Zrobione (Nie kasowa\u0107) DueDate = DataKo\u0144ca Due_Date = Data Zako\u0144czenia Edit = Edytuj EditNew = Edytuj nowe Email = Email Email\: = Email: EmailParameters = Parametry Email Enable_Email = W\u0142\u0105cz Email Exit = Wyj\u015Bcie Father's_Day = Dzie\u0144 Ojca Fax\: = Fax: Filter\: = Filtr: First = Imi\u0119 First_Name\: = Imi\u0119: Frequency = Cz\u0119stotliwo\u015B\u0107 Go_To = Id\u017A do Ground_Hog_Day = Ground Hog Day Half_Day = praca tylko przed po\u0142udniem/tylko po po\u0142udniu Halloween = Halloween Help = Pomoc Holiday = \u015Awi\u0119to HomeAddress = Adres Domowy Home_City\: = Miasto: Home_Country\: = Pa\u0144stwo: Home_Phone = Telefon domowy Home_Phone\: = Telefon domowy: Home_State\: = Wojew\u00F3dztwo: Home_Street_Address = Ulica Home_Zip_Code\: = Kod pocztowy: Import = Importuj Import_WARNING = OSTRZE\u017BENIE importu Importing_ = Importuje Independence_Day = Dzie\u0144 Niepodleg\u0142o\u015Bci Initializing = Inicjalizacja Item = Pozycja Item_ = Pozycja Item_\# = Pozycja # Labor_Day = Labor Day Labour_Day_(Can) = Labour Day (Can) Last = Nazwisko Last_Name\: = Nazwisko: License = Licencja Look_and_Feel\: = Wygl\u0105d: Martin_Luther_King_Day = Martin Luther King Day Memorial_Day = Memorial Day Month_View = Widok miesi\u0119cy Mother's_Day = Dzie\u0144 Matki NEW_Item = NOWA pozycja New_State = Nowy stan New_Task_Type = Nowy typ zada\u0144 New_Year's_Day = Nowy Rok Next_States = Nast\u0119pne stany Nickname\: = Pseudonim: No_Specific_Time = Brak okre\u015Blonego czasu Notes = Notatki/Uwagi Notice = Zawiadomienie (notice) OK = OK Open = Otw\u00F3rz Open_Calendar = Otw\u00F3rz kalendarz Options = Opcje PA = PA Pager\: = Pager: Password = Has\u0142o Please_choose_File_to_Import_From = Prosz\u0119 wybra\u0107 plik z kt\u00F3rego b\u0119dziesz importowa\u0142 Please_choose_directory_to_place_XML_files = Prosz\u0119 wybra\u0107 katalog dla plik\u00F3w XML Please_enter_some_appointment_text = Prosz\u0119 wprowad\u017A jak\u0105\u015B tre\u015B\u0107 zdarzenia Please_select_a_state = Prosz\u0119 wybra\u0107 stan Please_select_a_type = Prosz\u0119 wybra\u0107 typ Presidents_Day = Presidents Day Pri = Pri Print = Drukuj Print_Chooser = Wyb\u00F3r drukarki Print_In_Color? = Drukowa\u0107 w kolorze? Private = Prywatne Properties = W\u0142a\u015Bciwo\u015Bci Really_Delete_ = Naprawd\u0119 skasowa\u0107 Really_change_the_database? = Naprawd\u0119 zmieni\u0107 baz\u0119 danych? Really_delete_number_ = Naprawd\u0119 skasowa\u0107 numer Recurrence = Powtarzanie Remembrance_Day = Remembrance Day Rename_State = Zmie\u0144 nazw\u0119 stanu Rename_Type = Zmie\u0144 nazw\u0119 typu Reset_Task_States_to_Default = Przywr\u00F3\u0107 list\u0119 zada\u0144 do ust. domy\u015Blnych Resolution = Rozdzielczo\u015B\u0107 SMTP_Server = Serwer SMTP Save = Zapisz Screen_Name\: = Nazwa wy\u015Bwietlana: Search_Results = Wyniki szukania Select = Wybierz Select_next_state = Wybierz nast\u0119pny stan Show_Canadian_Holidays = Pokazuj Kanadyjskie \u015Bwi\u0119ta Show_Private_Appointments = Poka\u017C prywatne zdarzenia Show_Public_Appointments = Poka\u017C publiczne zdarzenia Show_Stack_Trace = Poka\u017C \u015Bledzenie stosu (Show Stack Trace) Show_U.S._Holidays = Poka\u017C \u015Bwi\u0119ta U.S. St._Patrick's_Day = St. Patrick's Day Standard_Time = Czas Standardowy StartDate = DataStartu Start_Date = Data Rozpocz\u0119cia Start_Time\: = Czas Rozpocz\u0119cia: States = Stany Status = Status SubTasks = Podpunkty TaskInformation = Informacje zada\u0144 Task_State_Editor = Edytor stan\u00F3w zada\u0144 Task_Types = Typy zada\u0144 Text = Tekst Thanksgiving = Thanksgiving Thanksgiving_(Can) = Thanksgiving (Can) Time = Czas Times = Razy To_Do = Do zrobienia To_Do_List = Lista "do zrobienia" Today = Dzisiaj Type = Typ Use_24_hour_time_format = U\u017Cyj 24 godzinnego formatu czasu Vacation = Wakacje/urlop Valentine's_Day = Walentynki Veteran's_Day = Veteran's Day Victoria_Day = Victoria Day Web_Page\: = Strona WWW: Week_Starts_with_Monday = Tydzie\u0144 zaczyna si\u0119 od Poniedzia\u0142ku Week_View = Widok tygodnia Week_View_End_Hour\:_ = Widok tygodnia - Godzina Zako\u0144czenia: Week_View_Start_Hour\:_ = Widok tygodnia - Godzina Rozpocz\u0119cia: WorkAddress = Adres do Pracy Work_City\: = Miasto: Work_Country\: = Pa\u0144stwo: Work_Phone = Telefon do pracy Work_Phone\: = Telefon do pracy: Work_State\: = Wojew\u00F3dztwo: Work_Street_Address = Ulica Work_Zip_Code\: = Kod pocztowy: Your_Email_Address = Tw\u00F3j adres Email ]_does_not_exist = ] nie istnieje ]_is_not_a_directory = ] nie jest katalogiem __through__ = przez (through) addcat = Dodaj now\u0105 kategori\u0119 appearance = Wygl\u0105d apply = Zastosuj appt_error = Okno zdarze\u0144 zostanie zamkni\u0119te w wyniku wcze\u015Bniejszego b\u0142\u0119du. By\u0107 mo\u017Ce zdarzenie zosta\u0142o usuni\u0119te z listy "do zrobienia" kiedy edytor by\u0142 otwarty. Je\u017Celi nie, uruchom ponownie Borg apptlist = Lista zdarze\u0144 appttext = Tekst zdarzenia appttime = Czas zdarzenia bad_db_2 = \\nJe\u015Bli z\u0142y adres bazy powoduje b\u0142\u0119dy, prosz\u0119 wybra\u0107 TAK, aby go zmieni\u0107. biweekly = dwutygodniowo black = czarny blue = niebieski catchooser = Wybierz kategori\u0119 changedate = Zmie\u0144 dat\u0119 choose_file = Wybierz plik choosecat = Wybierz kategorie do wy\u015Bwietlenia clear_all = Wyczy\u015B\u0107 wszystko contact = Informacje kontaktu daily = dziennie db_set_to = \\n\\nTwoja baza danych jest ustawiona na: del_tip = Skasuj wszystkie wyst\u0105pienia (powtarzania) zdarzenia delete_selected = Usu\u0144 zaznaczone doo_tip = Skasuj tylko aktualne wyst\u0105pienie powtarzaj\u0105cego si\u0119 zdarzenia edit_types = Edytuj typy zada\u0144 i stan\u00F3w enable_popups = W\u0142\u0105cz przypomnienie Popup\n enturl = Wprowad\u017A URL: ep = Edytuj Ustawienia expXML = Eksportuj XML... forever = Powtarzaj w niesko\u0144czono\u015B\u0107 green = zielony impXML = Importuj XML... impexpMenu = Import / Eksport locale = Lokalizacja (wymaga restartu programu) min_aft_app = minut po zdarzeniu min_bef_app = minut przed zdarzeniem misc = R\u00F3\u017Cne monthly = miesi\u0119cznie (data) monthly_day = miesi\u0119czne (dzie\u0144) mwf = Po\u0144-\u015Ar-Pi ndays = Ka\u017Cde N dni newDate\: = Nowa data: nummonths = Liczba miesi\u0119cy do drukowania? once = raz popup_reminders = Przypomnianie Popup red = czerwony remcat = Usu\u0144 nieu\u017Cywane kategorie reset_state_warning = To zresetuje wszystkie Twoje ustawienia wygl\u0105du dla wzoru zada\u0144 (task model)\\nWz\u00F3r zada\u0144 zostanie zresetowany do ustawie\u0144 domy\u015Blnych.\\nCzy naprawd\u0119 chcesz to zrobi\u0107?\\n save_Def = Zapisz domy\u015Blne sd_tip = Zapisz obecne warto\u015Bci jako domy\u015Blne dla zdarze\u0144 select_all = Zaznacz wszystko selectdb = Baza danych nie jest ustawiona. Prosz\u0119 wprowadzi\u0107 ustawienia bazy danych. set_def_font = Ustaw domy\u015Bln\u0105 czcionk\u0119 showdoy = Poka\u017C dzie\u0144 roku splash = Poka\u017C splash screen srch = Szukaj stackonerr = Poka\u017C opcje Stack Trace w dialogach b\u0142\u0119du strike = przekre\u00C5\u009Blony (strike-through) todomissingdata = Prosz\u0119 poda\u0107 oba: tekst "do zrobienia" i dat\u0119. todoquickentry = Szybki wpis "do zrobienia" * tth = Wt-Czw uncategorized = viewchglog = Zobacz log zmian weekdays = Poniedzia\u0142ek-Pi\u0105tek weekends = Sobota i niedziela weekly = tygodniowo white = bia\u0142y yearly = rocznie ================================================ FILE: BORGCalendar/common/src/main/resources/borg_resource_pt.properties ================================================ *****_NEW_APPT_***** = ***** NOVO EVENTO ***** -db_argument_is_missing = -falta argumento de banco de dados About = Sobre|S About_BORG = Sobre BORG Action = A\u00E7\u00E3o|C Add = Novo|N|INSERT AddCat = Digite Nova Categoria: Add_Log = Adicionar Entrada de Registro (Log) Add_New = Adicionar Novo|N|INSERT Add_State = Adicionar Estado Add_Type = Adicionar Tipo Address = Endere\u00E7o Address_Book = Agenda de Endere\u00E7os|A|ctrl A Address_Book_Entry = Entrada da Agenda de Endere\u00E7os After = Depois All = Todas|T All_Open = Todos Abertos Apply_DB_Change = Realize modifica\u00E7\u00E3o no BD|C Appointment_Editor = Editor de Eventos Appointment_Editor_for_ = Editor de Eventos para Before = Antes Berger-Organizer_v = Berger-Organizer v Birthday = Anivers\u00E1rio|V Boxing_Day = Boxing Day Browse = Navegar|N Build_Time\:_ = \\nHora da Compila\u00E7\u00E3o:\\n CLOSED = FECHADO Canada_Day = Canada Day Cancel = Cancelar Categories = Categorias|R Category = Categoria|R Cell_Phone\: = Telefone Celular: Change = Modificar|M|ctrl E Christmas = Natal Civic_Holiday = Civic Holiday Clear_DueDate = Lipar Data de Fechamento Clone = Clonar|O|ctrl O Close = Fechar|F|ctrl X Closed = Encerrada|E Color = Cor|C Columbus_Day = Columbus Day Commonwealth_Day = Commonwealth Day Company = Companhia|C Confirm_DB_Change = Confirme Modifica\u00E7\u00F5es no BD Confirm_Delete = Confirmar Dele\u00E7\u00E3o Could_not_parse_times\:_ = N\u00E3o pude ler repeti\u00E7\u00F5es: DataBase_Directory = Diret\u00F3rio do Banco de Dados|D DatabaseInformation = Informa\u00E7\u00E3o do Banco de Dados Date = Data|D Day_View = Visualiza\u00E7\u00E3o Di\u00E1ria Daylight_Savings_Time = Hor\u00E1rio de Ver\u00E3o Days = Dias Days_Left = Dias Restantes Delete = Deletar|D|DELETE Delete_Addresses = Delete Endere\u00E7o(s)? Delete_Memo = Deletar Memo Delete_One_Only = Deletar um Apenas|U Delete_State = Deletar estado Delete_Type = Deletar Tipo Description = Descri\u00E7\u00E3o Directory_[ = Diret\u00F3rio [ Discard_Text? = Descartar Texto? Dismiss = Cancelar||alt X Done_(Delete) = Feito (Delete)|E Done_(No_Delete) = Feito (N\u00E3o Delete)|O DueDate = Data de T\u00E9rmino Due_Date = Data de t\u00E9rmino|T Edit = Editar|E EditNew = Edita Novo Email = Email Email\: = Email:|E EmailParameters = Par\u00E2metros de Email Enable_Email = Habilite Email|E EndDate = DataFinal Enter_Log = Digite Entrada de Registro (log) Enter_Memo_Name = Favor digitar o nome para o novo memo Existing_Memo = J\u00E1 existe um memo com esse nome Exit = Sair|X|alt X Father's_Day = Father's Day Fax\: = Fax:|A Filter\: = Filtro:|F First = Primeiro First_Name\: = Nome:|F Frequency = Frequ\u00EAncia|F Go_To = Ir Para|P Ground_Hog_Day = Ground Hog Day Half_Day = Meio Expediente|M Halloween = Halloween Help = Ajuda|A|F1 Holiday = Feriado HomeAddress = Endere\u00E7o Residencial Home_City\: = Cidade:|C Home_Country\: = Pa\u00EDs:|U Home_Phone = Tel Residencial Home_Phone\: = Tel Residencial:|H Home_State\: = Estado:|T Home_Street_Address = Endere\u00E7o|A Home_Zip_Code\: = CEP:|Z Hour = Hora Hours = Horas ISO_week_number = Use Numera\u00E7\u00E3o de Semana ISO 8601 Import = Importar Import_WARNING = AVISO de importa\u00E7\u00E3o Importing_ = Importando Independence_Day = Dia da Independ\u00EAncia (USA) Initializing = Inicializando Item = \u00CDtem Item_ = \u00CDtem Item_\# = \u00CDtem #|I Labor_Day = Labor Day Labour_Day_(Can) = Labour Day (Can) Last = \u00DAltimo Last_Name\: = Sobrenome:|L License = Licen\u00E7a|L Look_and_Feel\: = Apar\u00EAncia:|L Martin_Luther_King_Day = Martin Luther King Day Memo_Name = Nome do Memo Memorial_Day = Memorial Day Memos = Memos Minute = Minuto Minutes = Minutos Month_View = Visualiza\u00E7\u00E3o Mensal Mother's_Day = Mother's Day Move_To_Following_Day = Mova para o Seguinte Dia|M NEW_Item = Novo \u00CDtem New_Memo = Novo Memo New_State = Novo Estado New_Task_Type = Novo Tipo de Tarefa New_Year's_Day = Ano Novo Next_States = Pr\u00F3ximos Estados Nickname\: = Apelido:|N NoOpenState = Erro: N\u00E3o foi encontrado nenhum estado inicial para o tipo de tarefa No_Specific_Time = Sem Hora Espec\u00EDfica|S No_more = N\u00E3o resta lembretes para este evento Notes = Anota\u00E7\u00F5es Notice = Aten\u00E7\u00E3o Now = -- Agora! -- OK = OK OPEN = ABERTO Open = Abrir|N Open_Calendar = Abrir Calend\u00E1rio|C Options = Op\u00E7\u00F5es|O|ctrl O PA = PA|A Pager\: = Pager:|P Password = Senha|P Please_choose_File_to_Import_From = Por Favor Escolha o Arquivo a ser Importado Please_choose_directory_to_place_XML_files = Favor escolher o diret\u00F3rio a colocar os arquivos XML Please_enter_some_appointment_text = Por Favor Digite Algum Texto de Evento Please_select_a_state = Favor selecionar um estado Please_select_a_type = Favor selecionar um tipo Popup_Times = Total de Popups Presidents_Day = Presidents Day Pri = Pri|P Print = Imprimir|P|ctrl P Print_Chooser = Selecionador de Impressora Print_In_Color? = Imprimir colorido?|C Private = Particular|P ProjectInformation = Informa\u00E7\u00E3o do Projeto Properties = Propriedades Really_Delete_ = Realmente Deletar Really_change_the_database? = Realmente modificar o banco de dados? Really_delete_number_ = Realmente delete n\u00FAmero Recurrence = Recorr\u00EAncia Remembrance_Day = Remembrance Day Reminder = Lembrete Reminder_Notice = Aviso de Lembrete BORG Rename_State = Renomear Estado Rename_Type = Renomear Tipo Reset_Task_States_to_Default = Resetar Estados de Tarefa ao Padr\u00E3o|R Resolution = Resolu\u00E7\u00E3o RunSQL = Execute SQL SMTP_Server = Servidor SMTP|S SMTP_password = Senha SMTP (Opcional) SMTP_user = Usu\u00E1rio SMTP (Opcional) Save = Salvar|S|ctrl S Save_Memo = Salvar Memo Screen_Name\: = Exibir Como:|M SearchString = Palavra-chave Search_Results = Resultados da Pesquisa Select = Selecione Select_Memo_Warning = Um memo deve ser selecionado para que se possa realizar essa a\u00E7\u00E3o Select_initial_state = Selecionar Initial State Select_next_state = Selecionar pr\u00F3ximo estado Set_DueDate = Configurar Data de Fechamento Set_Initial_State = Configure o Estado Inicial Show_Canadian_Holidays = Mostrar Feriados Canadenses|C Show_Private_Appointments = Mostrar Eventos Privados|V Show_Public_Appointments = Mostrar Eventos P\u00FAblicos|P Show_Stack_Trace = Show Stack Trace Show_U.S._Holidays = Mostrar Feriados dos U.S.A.|U St._Patrick's_Day = St. Patrick's Day Standard_Time = Hora Padr\u00E3o StartDate = Data de In\u00EDcio Start_Date = Data de in\u00EDcio|D Start_Time\: = In\u00EDcio:|I State_Change = Estado modificado States = Estados Status = Estado|U SubTasks = Sub-tarefas TaskInformation = Informa\u00E7\u00E3o da Tarefa Task_Created = Tarefa Criada Task_State_Editor = Editor de Estado de Tarefa Task_Types = Tipos de Tarefas Text = Texto Thanksgiving = Thanksgiving Thanksgiving_(Can) = Thanksgiving (Can) Time = Hora Times = Total|M To_Do = Tarefas|T|ctrl T To_Do_List = Lista A Fazer|F Today = Hoje|H|HOME Type = Tipo|Y Use_24_hour_time_format = Utilizar formato de 24 horas|2 Use_system_beep = Usar o Beep do Sistema UserColorScheme = Esquema de Cores Personalizada Vacation = F\u00E9rias|F Valentine's_Day = Valentine's Day Veteran's_Day = Veteran's Day Victoria_Day = Victoria Day Web_Page\: = Home-Page:|G Week_Starts_with_Monday = Semana Inicia na Segunda-Feira|M Week_View = Visualiza\u00E7\u00E3o Semanal Week_View_End_Hour\:_ = Hora Final do Dia:|E Week_View_Start_Hour\:_ = Hora Inicial do Dia:|S WorkAddress = Endere\u00E7o Profissional Work_City\: = Cidade:|I Work_Country\: = Pa\u00EDs:|R Work_Phone = Tel Profissional Work_Phone\: = Tel Profissional:|W Work_State\: = Estado:|E Work_Street_Address = Endere\u00E7o|D Work_Zip_Code\: = CEP:|O Your_Email_Address = Seu Email|Y ]_does_not_exist = ] n\u00E3o existe ]_is_not_a_directory = ] n\u00E3o \u00E9 um diret\u00F3rio __through__ = at\u00E9 addcat = Adicionar Nova Categoria|A addresses = Endere\u00E7os appearance = Apar\u00EAncia apply = Aplicar|A appointments = Eventos appt_error = The appointment window will close due to a prior error. Perhaps an appointment was removed from the ToDo window while the editor was open. If not, restart Borg apptlist = Lista de Eventos appttext = Texto do Evento appttime = Hor\u00E1rio do Evento bad_db_2 = \\nSe um diret\u00F3rio errado estiver causando erro, clique SIM para modific\u00E1-lo. biweekly = bi-semanalmente black = preto blue = azul calShowSubtask = Mostrar Sub-tarefas no Calend\u00E1rio/Todo calShowTask = Mostrar Tarefas no Calend\u00E1rio/Todo case_sensitive = Diferenciar mai\u00FAsculas/min\u00FAsculas cat_choose = Escolher Categoria catchooser = Seletor de Categorias changedate = Mudar Data|H chg_cat = Modoficar Categoria choose_file = Escolher Arquivo choosecat = Escolha as Categorias a serem Mostradas|C clear_all = Deletar Todos|D close_date = Dia do Fechamento close_proj_warn = N\u00E3o posso fechar o projeto. Ao menos uma tarefa afiliada ainda n\u00E3o foi fechada. confirm_overwrite = Confirma Sobrescrever contact = Informa\u00E7\u00E3o do Contato contributions_by = Agradecimentos \u00E0 Contribui\u00E7\u00F5es de: copyright = Copyright created = Criada custom_times_header = Total de Lembretes Pop-up para daily = diariamente db_set_to = \\n\\nSeu diret\u00F3rio de dados \u00E9: del_tip = Deletar todas ocorr\u00EAncias (repeti\u00E7\u00F5es) de um evento. delcat_warn = AVISO! Deletando TODOS eventos e tarefas da categoria delete_cat = Deletar Categoria|D delete_cat_choose = Escolha Categoria para Dele\u00E7\u00E3o delete_selected = Deletar Selecionado deleted = Deletado dlist = selecionar dias done = feito doo_tip = Deletar somente a esta ocorr\u00EAncia do evento recorrente. dview_font = Fonte da Visualiza\u00E7\u00E3o Di\u00E1ria edit_types = Editar Tipos e Estados de Tarefas|E elapsed_time = Dias Gastos empty_desc = Favor digitar uma Descri\u00E7\u00E3o enable_popups = Habilitar Lembretes Pop-up\n|P enable_systray = Habilite o \u00CDcone do System Tray (necessita reinicializa\u00E7\u00E3o) enturl = Digite URL: ep = Editar Prefer\u00EAncias|E expXML = Exportar XML...|E fonts = Fontes forever = Repetir Eternamente|F green = verde h2info = Informa\u00E7\u00E3o H2 history = Hist\u00F3rico hsqldb = HSQLDB hsqldbinfo = Informa\u00E7\u00E3o HSQLDB impXML = Importar XML...|I impexpMenu = Importar / Exportar|I jdbc = JDBC Gen\u00E9rico locale = Locale (necess\u00E1rio reiniciar o programa)|O min_aft_app = minutos ap\u00F3s o evento min_bef_app = minutos antes do evento minute_reminder = lembrete em minutos minutes_ago = minutos atr\u00E1s! misc = Miscel\u00E2nea monthly = mensalmente (data) monthly_day = mensalmente (dia) mview_font = Fonte de Impress\u00E3o mwf = seg, qua e sex navy = navy ndays = a cada "n" dias newDate\: = Nova Data:|N noOutput = O comando SQL n\u00E3o emitiu nenhuma sa\u00EDda ou erros nummonths = Total de meses a imprimir? once = \u00FAnica vez open_subtasks = Imposs\u00EDvel Fechar a Tarefa, nem todas as Subtarefas j\u00E1 est\u00E3o fechadas. open_tasks = Terfas Abertas overwrite_warning = Arquivo Existe. Posso sobrescrev\u00EA-lo: popup_reminders = Lembretes Pop-up projdd_warning = N\u00E3o \u00E9 poss\u00EDvel salvar o projeto. Uma tarefa afiliada tem um dia de fechamento posterior ao dia de fechamento do projeto project = Projeto projects = Projetos recur_compat = Erro: Recorr\u00EAncia n\u00E3o \u00E9 compat\u00EDvel com a data do evento. red = vermelho remcat = Remover Categorias n\u00E3o Utilizadas|R reminder_time = Hor\u00E1rio do Email Lembrete|R repeating = Repeti\u00E7\u00E3o reset_state_warning = Isso ir\u00E1 desfazer qualquer personaliza\u00E7\u00E3o que tenha sido feita ao modelo de tarefa\\nO modelo de tarefa ser\u00E1 reconfigurado como o modelo inicial padr\u00E3o.\\nRealmente deseja continuar?\\n restore_defaults = retorna ao padr\u00E3o rlsnotes = Avisos da Vers\u00E3o save_Def = Salvar o Padr\u00E3o sd_tip = Salvar valores atuais como novo Padr\u00E3o para Eventos select_all = Selecionar Todos|S select_export_dir = Selecione Diret\u00F3rio para Exporta\u00E7\u00E3o selectdb = Banco de Dados n\u00E3o est\u00E1 definido. Favor digitar as configura\u00E7\u00F5es do banco de dados. send_reminder = Enviar Email Lembrete|E set_def_font = Fonte Padr\u00E3o|D show_rpt_num = Mostrar o N\u00FAmero de Repeti\u00E7\u00F5es|W showdoy = Mostrar Dia do Ano|Y socket_port = Socket Port (-1=disabilitado, necessita reiniciar) socket_warn = Socket Port tem que ser um inteiro splash = Mostrar tela de inicializa\u00E7\u00E3o|S srch = Pesquisar|P|F3 stackonerr = Mostrar Op\u00E7\u00F5es do Stack Trace nas Janelas de Erro|K stdd_warning = Imposs\u00EDvel Salvar Tarefa. Uma subtarefa tem um dia de fechamento posterior ao dia de fechamento da tarefa. strike = Tachado stripecolor = Tabela de Cores (Table Stripe Color) subject = Assunto subtask = Subtarefa subtask_id = ID da Subtarefa taskOptions = Op\u00E7\u00F5es de Tarefas task_abbrev = Mostrar N\u00FAmero das Tarefas no Calend\u00E1rio taskdd_warning = N\u00E3o \u00E9 poss\u00EDvel salvar tarefas com dia de fechamento posterior ao dia de fechamento do projeto tasks = Tarefas todomissingdata = Por favor digite tanto o texto do A Fazer quanto a data. todoquickentry = Entrada R\u00E1pida de A Fazer * total_tasks = Tarefas Totais truncate_appts = Abreviar Eventos na Visualiza\u00E7\u00E3o Mensal|T tth = ter e qui ucolortext1 = usar cores personalizadas na lista A Fazer|T ucolortext10 = feriados ucolortext11 = anivers\u00E1rios ucolortext12 = padr\u00E3o ucolortext13 = feriado ucolortext14 = meio-expediente ucolortext15 = f\u00E9rias ucolortext16 = hoje ucolortext17 = fim-de-semana ucolortext18 = dia-de-semana ucolortext2 = marcar A Fazer na visualiza\u00E7\u00E3o mensal|M ucolortext4 = cor de texto 1 ucolortext5 = cor de texto 2 ucolortext6 = cor de texto 3 ucolortext7 = cor de texto 4 ucolortext8 = cor de texto 5 ucolortext9 = tarefas uncategorized = user = usu\u00E1rio viewchglog = Visualizar o Registro de Mudan\u00E7as|V weekdays = segunda-sexta weekends = s\u00E1bado e domingo weekly = semanalmente white = branco wview_font = Fonte da Visualiza\u00E7\u00E3o Semanal yearly = anualmente ================================================ FILE: BORGCalendar/common/src/main/resources/borg_resource_ru.properties ================================================ *****_NEW_APPT_***** = \u041D\u043E\u0432\u043E\u0435 \u0441\u043E\u0431\u044B\u0442\u0438\u0435 -db_argument_is_missing = -db \u0430\u0440\u0433\u0443\u043C\u0435\u043D\u0442 \u043D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D About = \u041E... About_BORG = \u041E \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0435 BORG Action = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 Add = \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C AddCat = \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u041D\u043E\u0432\u0443\u044E \u041A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u044E: Add_New = \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C Add_State = \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0421\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435 Add_Type = \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0422\u0438\u043F Address = \u0410\u0434\u0440\u0435\u0441 Address_Book = \u0410\u0434\u0440\u0435\u0441\u043D\u0430\u044F \u041A\u043D\u0438\u0433\u0430 Address_Book_Entry = \u0417\u0430\u043F\u0438\u0441\u044C \u0410\u0434\u0440\u0435\u0441\u043D\u043E\u0439 \u041A\u043D\u0438\u0433\u0438 All = \u0412\u0441\u0435 Apply_DB_Change = \u0417\u0430\u043F\u043E\u043C\u043D\u0438\u0442\u044C \u0411\u0414 Appointment_Editor = \u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0421\u043E\u0431\u044B\u0442\u0438\u044F Appointment_Editor_for_ = \u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0421\u043E\u0431\u044B\u0442\u0438\u044F \u0434\u043B\u044F Berger-Organizer_v = Berger-Organizer \u0432 Birthday = \u0414\u0420 Boxing_Day = Boxing Day Browse = \u0421\u043C\u043E\u0442\u0440\u0435\u0442\u044C Build_Time\:_ = \\n\u0412\u0440\u0435\u043C\u044F \u0421\u0431\u043E\u0440\u043A\u0438:\\n CLOSED = \u0417\u0410\u041A\u0420\u042B\u0422\u041E Canada_Day = Canada Day Cancel = \u041E\u0442\u043C\u0435\u043D\u0430 Categories = \u041A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0438 Category = \u041A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u044F Cell_Phone\: = \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u0439 \u0442\u0435\u043B\u0435\u0444\u043E\u043D: Change = \u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C Christmas = \u0420\u043E\u0436\u0434\u0435\u0441\u0442\u0432\u043E Civic_Holiday = Civic Holiday Clone = \u041A\u043B\u043E\u043D\u0438\u0440\u043E\u0432\u0430\u0442\u044C Close = \u0417\u0430\u043A\u0440\u044B\u0442\u044C Closed = \u0417\u0430\u043A\u0440\u044B\u0442\u043E Color = \u0426\u0432\u0435\u0442 Columbus_Day = Columbus Day Commonwealth_Day = Commonwealth Day Company = \u041A\u043E\u043C\u043F\u0430\u043D\u0438\u044F Confirm_DB_Change = \u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0411\u0414 Confirm_Delete = \u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C \u0423\u0434\u0430\u043B\u0435\u043D\u0438\u0435 Could_not_parse_times\:_ = \u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043F\u043E\u043D\u044F\u0442\u044C \u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0440\u0430\u0437: DataBase_Directory = \u041A\u0430\u0442\u0430\u043B\u043E\u0433 \u0411\u0414 DatabaseInformation = \u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E \u0411\u0414 Date = \u0414\u0430\u0442\u0430 Day_View = \u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0414\u043D\u044F Daylight_Savings_Time = Daylight Savings Time Days_Left = \u041E\u0441\u0442\u0430\u043B\u043E\u0441\u044C Delete = \u0423\u0434\u0430\u043B\u0438\u0442\u044C Delete_One_Only = \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043E\u0434\u043D\u043E\u043A\u0440\u0430\u0442\u043D\u043E Delete_State = \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0421\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435 Delete_Type = \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0422\u0438\u043F Description = \u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 Directory_[ = \u041A\u0430\u0442\u0430\u043B\u043E\u0433 [ Discard_Text? = \u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u0432\u0432\u0435\u0434\u0435\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442? Dismiss = \u0423\u0431\u0440\u0430\u0442\u044C Done_(Delete) = \u0413\u043E\u0442\u043E\u0432\u043E (\u0423\u0434\u0430\u043B\u0438\u0442\u044C) Done_(No_Delete) = \u0413\u043E\u0442\u043E\u0432\u043E (\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C) DueDate = \u041F\u043B\u0430\u043D Due_Date = \u041F\u043B\u0430\u043D Edit = \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C EditNew = \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u041D\u043E\u0432\u044B\u0439 Email = \u0415\u043C\u044D\u0439\u043B Email\: = \u0415\u043C\u044D\u0439\u043B: EmailParameters = \u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u041F\u043E\u0447\u0442\u044B Enable_Email = \u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C \u041F\u043E\u0447\u0442\u0443 Exit = \u0412\u044B\u0445\u043E\u0434 Father's_Day = Father's Day Fax\: = \u0424\u0430\u043A\u0441: Filter\: = \u0424\u0438\u043B\u044C\u0442\u0440: First = \u041F\u0435\u0440\u0432\u044B\u0439 First_Name\: = \u0418\u043C\u044F: Frequency = \u0427\u0430\u0441\u0442\u043E\u0442\u0430 Go_To = \u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u041A Ground_Hog_Day = \u0414\u0435\u043D\u044C \u0421\u0443\u0440\u043A\u0430 Half_Day = \u041F\u043E\u043B\u0434\u043D\u044F Halloween = \u0425\u044D\u043B\u043B\u043E\u0443\u0438\u043D\u043D Help = \u0421\u043F\u0440\u0430\u0432\u043A\u0430 Holiday = \u041F\u0440\u0430\u0437\u0434\u043D\u0438\u043A HomeAddress = \u0414\u043E\u043C\u0430\u0448\u043D\u0438\u0439 \u0410\u0434\u0440\u0435\u0441 Home_City\: = \u0413\u043E\u0440\u043E\u0434: Home_Country\: = \u0421\u0442\u0440\u0430\u043D\u0430: Home_Phone = \u0414\u043E\u043C\u0430\u0448\u043D\u0438\u0439 \u0442\u0435\u043B. Home_Phone\: = \u0414\u043E\u043C\u0430\u0448\u043D\u0438\u0439 \u0442\u0435\u043B.: Home_Street_Address = \u0410\u0434\u0440\u0435\u0441 Home_Zip_Code\: = \u0418\u043D\u0434\u0435\u043A\u0441: Import = \u0418\u043C\u043F\u043E\u0440\u0442 Import_WARNING = \u041F\u0420\u0415\u0414\u0423\u041F\u0420\u0415\u0416\u0414\u0415\u041D\u0418\u0415 \u043E\u0431 \u0438\u043C\u043F\u043E\u0440\u0442\u0435 Importing_ = \u0418\u043C\u043F\u043E\u0440\u0442\u0438\u0440\u0443\u044E\u0442\u0441\u044F Independence_Day = \u0414\u0435\u043D\u044C \u041D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0441\u0442\u0438 Initializing = \u0418\u043D\u0438\u0446\u0438\u0430\u043B\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044F Item = \u041F\u0443\u043D\u043A\u0442 Item_ = \u041F\u0443\u043D\u043A\u0442 Item_\# = \u041F\u0443\u043D\u043A\u0442 \u2116 Labor_Day = Labor Day Labour_Day_(Can) = Labour Day (Can) Last = \u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0439 Last_Name\: = \u0424\u0430\u043C\u0438\u043B\u0438\u044F: License = \u041B\u0438\u0446\u0435\u043D\u0437\u0438\u044F Look_and_Feel\: = \u0422\u0435\u043C\u0430 \u0418\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430: Martin_Luther_King_Day = Martin Luther King Day Memorial_Day = Memorial Day Month_View = \u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u041C\u0435\u0441\u044F\u0446\u0430 Mother's_Day = Mother's Day NEW_Item = \u041D\u041E\u0412\u042B\u0419 \u041F\u0443\u043D\u043A\u0442 New_State = \u041D\u043E\u0432\u043E\u0435 \u0421\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435 New_Task_Type = \u041D\u043E\u0432\u044B\u0439 \u0422\u0438\u043F \u0417\u0430\u0434\u0430\u0447\u0438 New_Year's_Day = \u041D\u043E\u0432\u044B\u0439 \u0413\u043E\u0434 Next_States = \u0421\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0435 \u0421\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u044F Nickname\: = \u041D\u0438\u043A: No_Specific_Time = \u0411\u0435\u0437 \u0423\u043A\u0430\u0437\u0430\u043D\u0438\u044F \u0412\u0440\u0435\u043C\u0435\u043D\u0438 Notes = \u0417\u0430\u043C\u0435\u0442\u043A\u0438 Notice = \u0423\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u0435 OK = \u0414\u0410 Open = \u041E\u0442\u043A\u0440\u044B\u0442\u044C Open_Calendar = \u041E\u0442\u043A\u0440\u044B\u0442\u044C \u041A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044C Options = \u041E\u043F\u0446\u0438\u0438 PA = \u041F\u0410 Pager\: = \u041F\u0435\u0439\u0434\u0436\u0435\u0440: Password = \u041F\u0430\u0440\u043E\u043B\u044C Please_choose_File_to_Import_From = \u0423\u043A\u0430\u0436\u0438\u0442\u0435, \u0438\u0437 \u043A\u0430\u043A\u043E\u0433\u043E \u0444\u0430\u0439\u043B\u0430 \u0418\u043C\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0434\u0430\u043D\u043D\u044B\u0435 Please_choose_directory_to_place_XML_files = \u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u043A\u0430\u0442\u0430\u043B\u043E\u0433, \u0432 \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u043F\u043E\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0444\u0430\u0439\u043B\u044B XML Please_enter_some_appointment_text = \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u0421\u043E\u0431\u044B\u0442\u0438\u044F Please_select_a_state = \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430 \u0443\u043A\u0430\u0436\u0438\u0442\u0435 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435 Please_select_a_type = \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430 \u0443\u043A\u0430\u0436\u0438\u0442\u0435 \u0442\u0438\u043F Presidents_Day = Presidents Day Pri = \u041F\u0440\u0438 Print = \u041F\u0435\u0447\u0430\u0442\u0430\u0442\u044C Print_Chooser = \u0412\u044B\u0431\u043E\u0440 \u041F\u0440\u0438\u043D\u0442\u0435\u0440\u0430 Print_In_Color? = \u041F\u0435\u0447\u0430\u0442\u044C \u0432 \u0426\u0432\u0435\u0442\u0435? Private = \u0427\u0430\u0441\u0442\u043D\u043E\u0435 Properties = \u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430 Really_Delete_ = \u0412 \u0441\u0430\u043C\u043E\u043C \u0434\u0435\u043B\u0435 \u0423\u0434\u0430\u043B\u0438\u0442\u044C Really_change_the_database? = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0438\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0411\u0414? Really_delete_number_ = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u043D\u043E\u043C\u0435\u0440 Recurrence = \u041F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435 Remembrance_Day = Remembrance Day Rename_State = \u041F\u0435\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u0442\u044C \u0421\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435 Rename_Type = \u041F\u0435\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u0442\u044C \u0422\u0438\u043F Reset_Task_States_to_Default = \u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u0421\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u044F \u0417\u0430\u0434\u0430\u0447 \u0432 \u0423\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044F Resolution = \u0420\u0435\u0437\u043E\u043B\u044E\u0446\u0438\u044F SMTP_Server = SMTP \u0421\u0435\u0440\u0432\u0435\u0440 Save = \u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C Screen_Name\: = \u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043A\u0430\u043A: Search_Results = \u041D\u0430\u0439\u0434\u0435\u043D\u043E Select = \u0412\u044B\u0431\u0440\u0430\u0442\u044C Select_next_state = \u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0435 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435 Show_Canadian_Holidays = \u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u041A\u0430\u043D\u0430\u0434\u0441\u043A\u0438\u0435 \u041F\u0440\u0430\u0437\u0434\u043D\u0438\u043A\u0438 Show_Private_Appointments = \u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0427\u0430\u0441\u0442\u043D\u044B\u0435 \u0421\u043E\u0431\u044B\u0442\u0438\u044F Show_Public_Appointments = \u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u041F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0435 \u0421\u043E\u0431\u044B\u0442\u0438\u044F Show_Stack_Trace = \u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0421\u0442\u0435\u043A \u0412\u044B\u0437\u043E\u0432\u043E\u0432 Show_U.S._Holidays = \u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0410\u043C\u0435\u0440\u0438\u043A\u0430\u043D\u0441\u043A\u0438\u0435 \u041F\u0440\u0430\u0437\u0434\u043D\u0438\u043A\u0438 St._Patrick's_Day = \u0414\u0435\u043D\u044C \u0441\u0432.\u041F\u0430\u0442\u0440\u0438\u043A\u0430 Standard_Time = Standard Time StartDate = \u0421\u0442\u0430\u0440\u0442 Start_Date = \u0421\u0442\u0430\u0440\u0442 Start_Time\: = \u0421\u0442\u0430\u0440\u0442: States = \u0421\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u044F Status = \u0421\u0442\u0430\u0442\u0443\u0441 SubTasks = \u041F\u043E\u0434\u0417\u0430\u0434\u0430\u0447\u0438 TaskInformation = \u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E \u0417\u0430\u0434\u0430\u0447\u0435 Task_State_Editor = \u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0421\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0439 \u0417\u0430\u0434\u0430\u0447 Task_Types = \u0422\u0438\u043F\u044B \u0417\u0430\u0434\u0430\u0447 Text = \u0422\u0435\u043A\u0441\u0442 Thanksgiving = Thanksgiving Thanksgiving_(Can) = Thanksgiving (Can) Time = \u0412\u0440\u0435\u043C\u044F Times = \u0420\u0430\u0437 To_Do = \u0412\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C To_Do_List = \u0421\u043F\u0438\u0441\u043E\u043A \u0414\u0435\u043B Today = \u0421\u0435\u0433\u043E\u0434\u043D\u044F Type = \u0422\u0438\u043F Use_24_hour_time_format = \u0414\u0432\u0430\u0434\u0446\u0430\u0442\u0438\u0447\u0435\u0442\u044B\u0440\u0435\u0445\u0447\u0430\u0441\u043E\u0432\u043E\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 Vacation = \u041A\u0430\u043D\u0438\u043A\u0443\u043B\u044B Valentine's_Day = \u0414\u0435\u043D\u044C \u0441\u0432.\u0412\u0430\u043B\u0435\u043D\u0442\u0438\u043D\u0430 Veteran's_Day = Veteran's Day Victoria_Day = Victoria Day Web_Page\: = \u0412\u0435\u0431\u0441\u0430\u0439\u0442: Week_Starts_with_Monday = \u041D\u0435\u0434\u0435\u043B\u044F \u0441 \u041F\u043E\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0438\u043A\u0430 Week_View = \u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u041D\u0435\u0434\u0435\u043B\u0438 Week_View_End_Hour\:_ = \u041A\u043E\u043D\u0435\u0446 \u0440\u0430\u0431\u043E\u0447\u0435\u0433\u043E \u0434\u043D\u044F: Week_View_Start_Hour\:_ = \u041D\u0430\u0447\u0430\u043B\u043E \u0440\u0430\u0431\u043E\u0447\u0435\u0433\u043E \u0434\u043D\u044F: WorkAddress = \u0420\u0430\u0431\u043E\u0447\u0438\u0439 \u0410\u0434\u0440\u0435\u0441 Work_City\: = \u0413\u043E\u0440\u043E\u0434: Work_Country\: = \u0421\u0442\u0440\u0430\u043D\u0430: Work_Phone = \u0420\u0430\u0431\u043E\u0447\u0438\u0439 \u0442\u0435\u043B. Work_Phone\: = \u0420\u0430\u0431\u043E\u0447\u0438\u0439 \u0442\u0435\u043B.: Work_Street_Address = \u0410\u0434\u0440\u0435\u0441 Work_Zip_Code\: = \u0418\u043D\u0434\u0435\u043A\u0441: Your_Email_Address = \u0412\u0430\u0448 \u041F\u043E\u0447\u0442\u043E\u0432\u044B\u0439 \u0410\u0434\u0440\u0435\u0441 ]_does_not_exist = ] \u043D\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 ]_is_not_a_directory = ] \u043D\u0435 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u043E\u043C __through__ = \u0432 \u0442\u0435\u0447\u0435\u043D\u0438\u0435 addcat = \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u041D\u043E\u0432\u0443\u044E \u041A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u044E appearance = \u0412\u043D\u0435\u0448\u043D\u0438\u0439 \u0412\u0438\u0434 apply = \u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C appt_error = \u041E\u043A\u043D\u043E \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043A\u0440\u044B\u0442\u043E \u0432\u0441\u043B\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u043E\u0431\u043D\u0430\u0440\u0443\u0436\u0435\u043D\u043D\u043E\u0439 \u043E\u0448\u0438\u0431\u043A\u0438. \u0412\u043E\u0437\u043C\u043E\u0436\u043D\u043E, \u0441\u043E\u0431\u044B\u0442\u0438\u0435 \u0431\u044B\u043B\u043E \u0443\u0434\u0430\u043B\u0435\u043D\u043E \u0438\u0437 \u043E\u043A\u043D\u0430 \u0412\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u043A\u043E\u0433\u0434\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0431\u044B\u043B \u043E\u0442\u043A\u0440\u044B\u0442. \u0415\u0441\u043B\u0438 \u043D\u0435\u0442, The \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0435 Borg apptlist = \u0421\u043F\u0438\u0441\u043E\u043A \u0421\u043E\u0431\u044B\u0442\u0438\u0439 appttext = \u0422\u0435\u043A\u0441\u0442 \u0421\u043E\u0431\u044B\u0442\u0438\u044F appttime = \u0412\u0440\u0435\u043C\u044F \u0421\u043E\u0431\u044B\u0442\u0438\u044F bad_db_2 = \\n\u0415\u0441\u043B\u0438 \u043E\u0448\u0438\u0431\u043A\u0430 \u0432\u044B\u0437\u0432\u0430\u043D\u0430 \u043D\u0435\u0432\u0435\u0440\u043D\u043E \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u044B\u043C \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u043E\u043C \u0411\u0414, \u043E\u0442\u0432\u0435\u0442\u044C\u0442\u0435 \u0414\u0410 \u0447\u0442\u043E\u0431\u044B \u0438\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0435\u0433\u043E. biweekly = \u0440\u0430\u0437 \u0432 \u0434\u0432\u0435 \u043D\u0435\u0434\u0435\u043B\u0438 black = \u0427\u0435\u0440\u043D\u044B\u0439 blue = \u0421\u0438\u043D\u0438\u0439 catchooser = \u0412\u044B\u0431\u043E\u0440 \u041A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0438 changedate = \u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0414\u0430\u0442\u0443 choose_file = \u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0424\u0430\u0439\u043B choosecat = \u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u041A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0438... clear_all = \u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u0412\u0441\u0435 contact = \u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u0430\u044F \u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F daily = \u0435\u0436\u0435\u0434\u043D\u0435\u0432\u043D\u043E db_set_to = \\n\\n\u0412\u0430\u0448 \u043A\u0430\u0442\u0430\u043B\u043E\u0433 \u0411\u0414 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D \u0432: del_tip = \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0441\u0435 \u0432\u0445\u043E\u0436\u0434\u0435\u043D\u0438\u044F (\u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F) \u0434\u0430\u043D\u043D\u043E\u0433\u043E \u0441\u043E\u0431\u044B\u0442\u0438\u044F delete_selected = \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0412\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u0435 doo_tip = \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0442\u043E\u043B\u044C\u043A\u043E \u0442\u0435\u043A\u0443\u0449\u0435\u0435 \u0432\u0445\u043E\u0436\u0434\u0435\u043D\u0438\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u044F\u044E\u0449\u0435\u0433\u043E\u0441\u044F \u0441\u043E\u0431\u044B\u0442\u0438\u044F edit_types = \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0422\u0438\u043F\u044B \u0438 \u0421\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u044F \u0417\u0430\u0434\u0430\u0447 enable_popups = \u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u043D\u0438\u044F \u043F\u043E \u043F\u043E\u0447\u0442\u0435\n enturl = \u0412\u0432\u0435\u0441\u0442\u0438 URL: ep = \u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 expXML = \u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C XML... forever = \u0411\u0435\u0441\u043A\u043E\u043D\u0435\u0447\u043D\u043E green = \u0417\u0435\u043B\u0435\u043D\u044B\u0439 impXML = \u0418\u043C\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C XML... impexpMenu = \u0418\u043C\u043F\u043E\u0440\u0442 / \u042D\u043A\u0441\u043F\u043E\u0440\u0442 locale = \u041B\u043E\u043A\u0430\u043B\u044C (\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u043A \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B) min_aft_app = \u043C\u0438\u043D\u0443\u0442 \u043F\u043E\u0441\u043B\u0435 \u0441\u043E\u0431\u044B\u0442\u0438\u044F min_bef_app = \u043C\u0438\u043D\u0443\u0442 \u0434\u043E \u0441\u043E\u0431\u044B\u0442\u0438\u044F misc = \u0420\u0430\u0437\u043D\u043E\u0435 monthly = \u0435\u0436\u0435\u043C\u0435\u0441\u044F\u0447\u043D\u043E (\u0434\u0430\u0442\u0430) monthly_day = \u0435\u0436\u0435\u043C\u0435\u0441\u044F\u0447\u043D\u043E (\u0434\u0435\u043D\u044C) mwf = \u041F\u043D-\u0421\u0440-\u041F\u0442 navy = \u0412\u041C\u0424 ndays = \u041A\u0430\u0436\u0434\u044B\u0435 N \u0414\u043D\u0435\u0439 newDate\: = \u041D\u043E\u0432\u0430\u044F \u0414\u0430\u0442\u0430: nummonths = \u0421\u043A\u043E\u043B\u044C\u043A\u043E \u041C\u0435\u0441\u044F\u0446\u0435\u0432 \u041F\u0435\u0447\u0430\u0442\u0430\u0442\u044C? once = \u043E\u0434\u043D\u0430\u0436\u0434\u044B popup_reminders = \u041F\u043E\u0447\u0442\u043E\u0432\u044B\u0435 \u0423\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F red = \u041A\u0440\u0430\u0441\u043D\u044B\u0439 remcat = \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u041D\u0435\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0435 \u041A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0438 reset_state_warning = \u042D\u0442\u043E \u0441\u0431\u0440\u043E\u0441\u0438\u0442 \u0432\u0441\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0412\u044B \u0441\u0434\u0435\u043B\u0430\u043B\u0438 \u0432 \u043C\u043E\u0434\u0435\u043B\u0438 \u0437\u0430\u0434\u0430\u0447.\\n\u041C\u043E\u0434\u0435\u043B\u044C \u0437\u0430\u0434\u0430\u0447 \u0431\u0443\u0434\u0435\u0442 \u0441\u0431\u0440\u043E\u0448\u0435\u043D\u0430 \u0432 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435, \u0437\u0430\u0444\u0438\u043A\u0441\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0435 \u0432 \u043F\u043E\u0441\u0442\u0430\u0432\u043A\u0435.\\n\u0412\u044B \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442\u0435 \u0432\u044B\u0431\u043E\u0440?\\n save_Def = \u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0423\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044F sd_tip = \u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0442\u0435\u043A\u0443\u0449\u0438\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0432 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u0439 \u0434\u043B\u044F \u0421\u043E\u0431\u044B\u0442\u0438\u0439 select_all = \u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0412\u0441\u0435 selectdb = \u0411\u0414 \u043D\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043D\u0430. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0411\u0414. set_def_font = \u0428\u0440\u0438\u0444\u0442 \u041F\u043E \u0423\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E showdoy = \u0412\u044B\u0432\u0435\u0441\u0442\u0438 \u041D\u043E\u043C\u0435\u0440 \u0414\u043D\u044F splash = \u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0437\u0430\u0441\u0442\u0430\u0432\u043A\u0443 srch = \u041F\u043E\u0438\u0441\u043A stackonerr = \u041E\u043F\u0446\u0438\u044F \u041F\u043E\u043A\u0430\u0437\u0430 \u0421\u0442\u0435\u043A\u0430 \u0412\u044B\u0437\u043E\u0432\u043E\u0432 \u0432 \u0414\u0438\u0430\u0434\u043B\u043E\u0433\u0430\u0445 \u041E\u0448\u0438\u0431\u043A\u0438 todomissingdata = \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043A\u0441\u0442 \u0438 \u0434\u0430\u0442\u0443 \u043F\u043E\u0440\u0443\u0447\u0435\u043D\u0438\u044F. todoquickentry = \u0411\u044B\u0441\u0442\u0440\u043E \u0432\u043D\u0435\u0441\u0442\u0438 \u0434\u0430\u043D\u043D\u044B\u0435 tth = \u0412\u0442-\u0427\u0442 uncategorized = <\u0412\u043D\u0435 \u041A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0439> viewchglog = \u0421\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u041B\u043E\u0433 \u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 weekdays = \u041F\u043E\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0438\u043A-\u041F\u044F\u0442\u043D\u0438\u0446\u0430 weekends = \u0421\u0443\u0431\u0431\u043E\u0442\u0430 \u0438 \u0412\u043E\u0441\u043A\u0440\u0435\u0441\u0435\u043D\u044C\u0435 weekly = \u0435\u0436\u0435\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u043E white = \u0411\u0435\u043B\u044B\u0439 yearly = \u0435\u0436\u0435\u0433\u043E\u0434\u043D\u043E ================================================ FILE: BORGCalendar/common/src/main/resources/borg_resource_zh.properties ================================================ *****_NEW_APPT_***** = ***** \u65B0\u5EFA\u7EA6\u4F1A ***** -db_argument_is_missing = -db \u53C2\u6570\u7F3A\u5931 About = \u5173\u4E8E About_BORG = \u5173\u4E8EBORG Action = \u64CD\u4F5C Add = \u6DFB\u52A0 AddCat = \u8F93\u5165\u65B0\u7684\u7C7B\u522B\u540D\u79F0: Add_New = \u6DFB\u52A0 Add_State = \u72B6\u6001\u6DFB\u52A0 Add_Type = \u6DFB\u52A0\u7C7B\u578B Address = \u5730\u5740\u4FE1\u606F Address_Book = \u5730\u5740\u672C Address_Book_Entry = \u5730\u5740\u672C\u9879\u76EE All = \u5168\u90E8 Apply_DB_Change = \u5E94\u7528DB\u4FEE\u6539 Appointment_Editor = \u7EA6\u4F1A\u7F16\u8F91\u5668 Appointment_Editor_for_ = \u7EA6\u4F1A\u7F16\u8F91\u5668 - Berger-Organizer_v = Berger-Organizer v Birthday = \u751F\u65E5 Boxing_Day = \u8282\u793C\u65E5 Browse = \u6D4F\u89C8 Build_Time\:_ = \\nBuild Time:\\n CLOSED = CLOSED Canada_Day = \u52A0\u62FF\u5927\u56FD\u5E86 Cancel = \u53D6\u6D88 Categories = \u7C7B\u522B Category = \u7C7B\u522B Cell_Phone\: = \u624B\u673A: Change = \u7F16\u8F91 Christmas = \u5723\u8BDE\u8282 Civic_Holiday = \u516C\u4F11\u65E5 Clone = \u514B\u9686 Close = \u6807\u6CE8\u5B8C\u6210 Closed = \u5DF2\u5B8C\u6210\u7684 Color = \u989C\u8272 Columbus_Day = \u54E5\u4F26\u5E03\u53D1\u73B0\u7F8E\u6D32\u7EAA\u5FF5\u65E5 Commonwealth_Day = \u82F1\u8054\u90A6\u8282 Company = \u516C\u53F8 Confirm_DB_Change = \u786E\u8BA4DB\u4FEE\u6539 Confirm_Delete = \u786E\u8BA4\u5220\u9664 Could_not_parse_times\:_ = \u65E0\u6CD5\u8BFB\u53D6\u65F6\u95F4\u683C\u5F0F: DataBase_Directory = \u6570\u636E\u5E93\u76EE\u5F55 DatabaseInformation = \u6570\u636E\u5E93 Date = \u65E5\u671F Day_View = \u6309\u65E5\u67E5\u770B Daylight_Savings_Time = \u590F\u65F6\u5236\u65F6\u95F4 Days_Left = \u5269\u4F59\u5929\u6570 Delete = \u5220\u9664 Delete_One_Only = \u4EC5\u5220\u9664\u4E00\u4E2A\u7EA6\u4F1A Delete_State = \u72B6\u6001\u5220\u9664 Delete_Type = \u5220\u9664\u7C7B\u578B Description = \u63CF\u8FF0 Directory_[ = \u76EE\u5F55 [ Discard_Text? = \u653E\u5F03\u7EA6\u4F1A\u5185\u5BB9\u5417? Dismiss = \u53D6\u6D88 Done_(Delete) = \u5DF2\u5B8C\u6210(\u5220\u9664) Done_(No_Delete) = \u5DF2\u5B8C\u6210(\u4E0D\u5220\u9664) DueDate = \u7ED3\u675F\u65E5\u671F Due_Date = \u7ED3\u675F\u65E5\u671F Edit = \u7F16\u8F91 EditNew = \u65B0\u5EFA Email = Email Email\: = Email: EmailParameters = \u7535\u5B50\u90AE\u4EF6 Enable_Email = \u5141\u8BB8\u4F7F\u7528\u7535\u5B50\u90AE\u4EF6 Exit = \u9000\u51FA Father's_Day = \u7236\u4EB2\u8282 Fax\: = \u4F20\u771F: Filter\: = \u7B5B\u9009: First = \u540D(First) First_Name\: = \u540D(First Name): Frequency = \u91CD\u590D\u9891\u7387 Go_To = \u8DF3\u81F3\u6307\u5B9A\u6708 Ground_Hog_Day = \u571F\u62E8\u9F20\u65E5 Half_Day = \u534A\u5929 Halloween = \u4E07\u5723\u8282 Help = \u5E2E\u52A9 Holiday = \u8282\u65E5 HomeAddress = \u4F4F\u5B85\u5730\u5740 Home_City\: = \u57CE\u5E02: Home_Country\: = \u56FD\u5BB6: Home_Phone = \u4F4F\u5B85\u7535\u8BDD Home_Phone\: = \u4F4F\u5B85\u7535\u8BDD: Home_State\: = \u7701/\u5E02/\u533A: Home_Street_Address = \u8857\u9053 Home_Zip_Code\: = \u90AE\u653F\u7F16\u7801: Import = \u5BFC\u5165 Import_WARNING = \u5BFC\u5165\u8B66\u544A Importing_ = \u6B63\u5728\u5BFC\u5165 Independence_Day = \u7F8E\u56FD\u72EC\u7ACB\u7EAA\u5FF5\u65E5 Initializing = \u521D\u59CB\u5316 Item = \u9879 Item_ = \u9879 Item_\# = \u5E8F\u53F7 Labor_Day = \u7F8E\u56FD\u52B3\u52A8\u65E5 Labour_Day_(Can) = \u52A0\u62FF\u5927\u52B3\u52A8\u65E5 Last = \u59D3(Last) Last_Name\: = \u59D3(Last Name): License = \u7528\u6237\u8BB8\u53EF\u534F\u8BAE Look_and_Feel\: = \u7A0B\u5E8F\u754C\u9762\u5916\u89C2: Martin_Luther_King_Day = \u9A6C\u4E01\u8DEF\u5FB7\u91D1\u7EAA\u5FF5\u65E5 Memorial_Day = \u7F8E\u56FD\u9635\u4EA1\u6218\u58EB\u7EAA\u5FF5\u65E5 Month_View = \u6309\u6708\u67E5\u770B Mother's_Day = \u6BCD\u4EB2\u8282 NEW_Item = \u65B0\u4EFB\u52A1 New_State = \u65B0\u72B6\u6001 New_Task_Type = \u65B0\u7684\u4EFB\u52A1\u7C7B\u578B New_Year's_Day = \u5143\u65E6 Next_States = \u540E\u7EED\u72B6\u6001 Nickname\: = \u6635\u79F0: No_Specific_Time = \u4E0D\u6307\u5B9A\u65F6\u95F4 Notes = \u5907\u6CE8 Notice = Notice OK = \u786E\u5B9A Open = \u672A\u6267\u884C\u7684 Open_Calendar = \u6253\u5F00\u65E5\u5386 Options = \u9009\u9879 PA = \u4E2A\u4EBA\u6307\u5B9A Pager\: = \u79FB\u52A8\u7535\u8BDD: Password = \u5BC6\u7801 Please_choose_File_to_Import_From = \u8BF7\u9009\u62E9\u8981\u5BFC\u5165\u7684\u6587\u4EF6 Please_choose_directory_to_place_XML_files = \u8BF7\u9009\u62E9XML\u6587\u4EF6\u6240\u5728\u7684\u76EE\u5F55 Please_enter_some_appointment_text = \u8BF7\u8F93\u5165\u7EA6\u4F1A\u7684\u5185\u5BB9 Please_select_a_state = \u8BF7\u5148\u9009\u62E9\u4E00\u79CD\u72B6\u6001 Please_select_a_type = \u8BF7\u5148\u9009\u62E9\u4E00\u4E2A\u7C7B\u578B Presidents_Day = \u7F8E\u56FD\u603B\u7EDF\u65E5 Pri = \u4F18\u5148\u7EA7 Print = \u6253\u5370 Print_Chooser = \u6253\u5370\u9009\u62E9 Print_In_Color? = \u4F7F\u7528\u5F69\u8272\u6253\u5370? Private = \u79C1\u5BC6\u7684 Properties = \u5C5E\u6027 Really_Delete_ = \u5F7B\u5E95\u5220\u9664 Really_change_the_database? = \u786E\u5B9E\u8981\u66F4\u6539\u6570\u636E\u5E93\u5417? Really_delete_number_ = \u5F7B\u5E95\u5220\u9664\u7684\u5E8F\u53F7 Recurrence = \u91CD\u590D Remembrance_Day = \u8363\u519B\u65E5 Rename_State = \u72B6\u6001\u91CD\u547D\u540D Rename_Type = \u91CD\u547D\u540D\u7C7B\u578B Reset_Task_States_to_Default = \u5C06\u4EFB\u52A1\u8BBE\u4E3A\u9ED8\u8BA4\u72B6\u6001 Resolution = \u8FDB\u5C55\u60C5\u51B5 SMTP_Server = SMTP\u670D\u52A1\u5668 Save = \u4FDD\u5B58 Screen_Name\: = \u663E\u793A\u540D\u79F0: Search_Results = \u641C\u7D22\u7ED3\u679C Select = \u9009\u62E9 Select_next_state = \u9009\u62E9\u540E\u7EED\u72B6\u6001 Show_Canadian_Holidays = \u663E\u793A\u52A0\u62FF\u5927\u8282\u65E5 Show_Private_Appointments = \u663E\u793A\u79C1\u5BC6\u7684\u7EA6\u4F1A\u4FE1\u606F Show_Public_Appointments = \u663E\u793A\u516C\u5F00\u7684\u7EA6\u4F1A\u4FE1\u606F Show_Stack_Trace = \u663E\u793A\u5806\u6808\u8DDF\u8E2A\u4FE1\u606F Show_U.S._Holidays = \u663E\u793A\u7F8E\u56FD\u8282\u65E5 St._Patrick's_Day = \u5723\u5E15\u7279\u91CC\u514B\u8282 Standard_Time = \u6807\u51C6\u65F6\u95F4 StartDate = \u5F00\u59CB\u65E5\u671F Start_Date = \u5F00\u59CB\u65E5\u671F Start_Time\: = \u5F00\u59CB\u65F6\u95F4: States = \u72B6\u6001 Status = \u72B6\u6001 SubTasks = \u5B50\u4EFB\u52A1 TaskInformation = \u4EFB\u52A1\u4FE1\u606F Task_State_Editor = \u7F16\u8F91\u4EFB\u52A1\u7684\u72B6\u6001 Task_Types = \u4EFB\u52A1\u7C7B\u578B Text = \u5185\u5BB9 Thanksgiving = \u611F\u6069\u8282 Thanksgiving_(Can) = \u611F\u6069\u8282(\u52A0\u62FF\u5927) Time = \u65F6\u95F4 Times = \u91CD\u590D\u6B21\u6570 To_Do = \u5F85\u529E\u4E8B\u9879 To_Do_List = \u5F85\u529E\u4E8B\u9879\u5217\u8868 Today = \u8DF3\u5230\u4ECA\u65E5 Type = \u7C7B\u578B Use_24_hour_time_format = \u4F7F\u752824\u5C0F\u65F6\u683C\u5F0F Vacation = \u5EA6\u5047 Valentine's_Day = \u60C5\u4EBA\u8282 Veteran's_Day = \u7F8E\u56FD\u8001\u5175\u7EAA\u5FF5\u65E5 Victoria_Day = \u7EF4\u591A\u5229\u4E9A\u7EAA\u5FF5\u65E5 Web_Page\: = \u4E3B\u9875: Week_Starts_with_Monday = \u6BCF\u5468\u5F00\u59CB\u4E8E\u661F\u671F\u4E00 Week_View = \u6309\u5468\u67E5\u770B Week_View_End_Hour\:_ = \u6BCF\u65E5\u5DE5\u4F5C\u65F6\u95F4\u7ED3\u675F\u4E8E: Week_View_Start_Hour\:_ = \u6BCF\u65E5\u5DE5\u4F5C\u65F6\u95F4\u5F00\u59CB\u4E8E: WorkAddress = \u529E\u516C\u5730\u5740 Work_City\: = \u57CE\u5E02: Work_Country\: = \u56FD\u5BB6: Work_Phone = \u529E\u516C\u7535\u8BDD Work_Phone\: = \u529E\u516C\u7535\u8BDD: Work_State\: = \u7701/\u5E02/\u533A: Work_Street_Address = \u8857\u9053 Work_Zip_Code\: = \u90AE\u653F\u7F16\u7801: Your_Email_Address = \u7535\u5B50\u90AE\u4EF6\u5730\u5740 ]_does_not_exist = ] \u4E0D\u5B58\u5728 ]_is_not_a_directory = ] \u4E0D\u662F\u4E00\u4E2A\u76EE\u5F55 __through__ = \u81F3 addcat = \u6DFB\u52A0\u65B0\u7C7B\u522B appearance = \u5916\u89C2\u663E\u793A apply = \u5E94\u7528 appt_error = \u7531\u4E8E\u51FA\u73B0\u4E00\u4E2A\u9519\u8BEF\uFF0C\u7EA6\u4F1A\u7A97\u53E3\u5C06\u5173\u95ED\u3002\u8FD9\u5C06\u53EF\u80FD\u5BFC\u81F4\u4E00\u4E2A\u7EA6\u4F1A\u4FE1\u606F\u5728\u4E0B\u6B21\u6253\u5F00\u65F6\u4ECE\u5F85\u529E\u4E8B\u9879\u7A97\u53E3\u4E2D\u4E22\u5931\uFF0C\u5426\u5219\uFF0C\u5219\u8BF7\u91CD\u65B0\u542F\u52A8Borg apptlist = \u7EA6\u4F1A\u5217\u8868 appttext = \u7EA6\u4F1A\u5185\u5BB9 appttime = \u7EA6\u4F1A\u65F6\u95F4 bad_db_2 = \\n\u5982\u679C\u7531\u4E8E\u4E00\u4E2A\u6570\u636E\u5E93\u76EE\u5F55\u5F15\u53D1\u4E86\u9519\u8BEF\uFF0C\u8BF7\u5355\u51FBYES\u540E\u4FEE\u6539\u5B83\u3002 biweekly = \u6BCF\u4E24\u5468 black = \u9ED1\u8272 blue = \u84DD\u8272 catchooser = \u7C7B\u522B\u9009\u62E9 changedate = \u66F4\u6539\u65E5\u671F choose_file = \u9009\u62E9\u6587\u4EF6 choosecat = \u9009\u62E9\u5F53\u524D\u7C7B\u522B clear_all = \u5168\u90E8\u6E05\u9664 contact = \u8054\u7CFB\u4EBA\u4FE1\u606F daily = \u6BCF\u65E5 db_set_to = \\n\\n\u60A8\u7684\u6570\u636E\u5E93\u76EE\u5F55\u5DF2\u7ECF\u88AB\u8BBE\u7F6E\u4E3A: del_tip = \u5220\u9664\u91CD\u590D\u6027\u7EA6\u4F1A\u4E2D\u7684\u6240\u6709\u5B9E\u4F8B delete_selected = \u5220\u9664\u6240\u9009 doo_tip = \u5220\u9664\u91CD\u590D\u6027\u7EA6\u4F1A\u4E2D\u7684\u5F53\u524D\u5B9E\u4F8B edit_types = \u7F16\u8F91\u4EFB\u52A1\u7684\u7C7B\u578B\u4E0E\u72B6\u6001 enable_popups = \u5141\u8BB8\u4F7F\u7528\u6D6E\u52A8\u63D0\u9192\u7A97\u53E3\n enturl = \u8F93\u5165URL: ep = \u9009\u9879\u8BBE\u7F6E expXML = \u5BFC\u51FAXML... forever = \u6CA1\u6709\u7ED3\u675F\u65E5\u671F green = \u7EFF\u8272 impXML = \u5BFC\u5165XML... impexpMenu = \u5BFC\u5165/\u5BFC\u51FA locale = \u672C\u5730\u8BED\u8A00\u652F\u6301(\u9700\u8981\u91CD\u65B0\u542F\u52A8\u7A0B\u5E8F) min_aft_app = \u5728\u7EA6\u4F1A\u5B8C\u6210\u4E4B\u540E min_bef_app = \u5728\u7EA6\u4F1A\u5230\u6765\u4E4B\u524D misc = \u6742\u9879 monthly = \u6BCF\u6708 (\u56FA\u5B9A\u65E5) monthly_day = \u6BCF\u6708 (\u56FA\u5B9A\u661F\u671F\u51E0) mwf = \u661F\u671F\u4E00\u3001\u4E09\u3001\u4E94 navy = navy ndays = \u6BCF\u9694N\u5929 newDate\: = \u65E5\u671F: nummonths = \u8981\u6253\u5370\u7684\u6708\u6570 once = \u4EC5\u4E00\u6B21 popup_reminders = \u63D0\u9192 red = \u7EA2\u8272 remcat = \u5220\u9664\u672A\u4F7F\u7528\u7684\u7C7B\u522B reset_state_warning = \u6B64\u64CD\u4F5C\u91CD\u7F6E\u4EFB\u52A1\u72B6\u6001\u4FE1\u606F\u4E3A\u7A0B\u5E8F\u539F\u59CB\u9ED8\u8BA4\u503C\uFF0C\\n\u8FD9\u5C06\u5BFC\u81F4\u6240\u6709\u81EA\u5B9A\u4E49\u7684\u4EFB\u52A1\u72B6\u6001\u4FE1\u606F\u5168\u90E8\u4E22\u5931\u3002\\n\u786E\u5B9A\u8981\u6267\u884C\u6B64\u64CD\u4F5C\u5417?\\n save_Def = \u4FDD\u5B58\u4E3A\u9ED8\u8BA4\u503C sd_tip = \u5C06\u5F53\u524D\u53D6\u503C\u4FDD\u5B58\u4E3A\u65B0\u7EA6\u4F1A\u7684\u9ED8\u8BA4\u53D6\u503C select_all = \u5168\u90E8\u9009\u62E9 selectdb = \u5C1A\u672A\u914D\u7F6E\u6570\u636E\u5E93\uFF0C\u8BF7\u8BBE\u7F6E\u6570\u636E\u5E93\u73AF\u5883\u3002 set_def_font = \u8BBE\u7F6E\u9ED8\u8BA4\u5B57\u4F53 showdoy = \u663E\u793A\u6BCF\u4E00\u5929\u5728\u4E00\u5E74\u4E2D\u7684\u5E8F\u53F7 splash = \u663E\u793A\u542F\u52A8\u753B\u9762 srch = \u641C\u7D22 stackonerr = \u5728\u9519\u8BEF\u5BF9\u8BDD\u6846\u4E2D\u663E\u793A\u5806\u6808\u8DDF\u8E2A\u4FE1\u606F strike = \u5220\u9664\u7EBF todomissingdata = \u8BF7\u540C\u65F6\u8F93\u5165\u5F85\u529E\u4E8B\u9879\u7684\u5185\u5BB9\u4E0E\u65E5\u671F. todoquickentry = \u5FEB\u901F\u6DFB\u52A0\u5F85\u529E\u4E8B\u9879 * tth = \u661F\u671F\u4E8C\u3001\u56DB uncategorized = <\u672A\u5B9A\u4E49\u7684\u7C7B\u522B> viewchglog = \u67E5\u770B\u7248\u672C\u5386\u53F2 weekdays = \u661F\u671F\u4E00\u5230\u661F\u671F\u4E94 weekends = \u661F\u671F\u516D\u4E0E\u661F\u671F\u65E5 weekly = \u6BCF\u5468 white = \u767D\u8272 yearly = \u6BCF\u5E74 ================================================ FILE: BORGCalendar/common/src/main/resources/properties ================================================ borg.version=2.0.0 build.time=${timestamp} build.number=${buildNumber} ================================================ FILE: BORGCalendar/install/.gitignore ================================================ /.classpath ================================================ FILE: BORGCalendar/install/README.txt ================================================ Installers are now created using jpackage. IzPack is no longer used. Installers need to be created manually by running either winpackage.bat on windows or linpackage.sh on linux. A tar or zip can be created from the contents of target/installer for other OSes, like MAC. ** The installers bundle Java. A tar or ZIP does not. ================================================ FILE: BORGCalendar/install/build.xml ================================================ ================================================ FILE: BORGCalendar/install/linpackage.sh ================================================ jpackage -t deb --app-version 2.0.0 -n BorgCalendar --vendor MBCSoft -i target/installer --main-class net.sf.borg.control.Borg --main-jar borg.jar --linux-menu-group Borg --linux-shortcut ================================================ FILE: BORGCalendar/install/pom.xml ================================================ 4.0.0 BORGCalendar BORGCalendar 2.0 install jar maven-resources-plugin 2.6 copy-resources process-resources copy-resources ${basedir}/target/installer src/main/resources true maven-antrun-plugin 1.7 false default-cli process-resources run ================================================ FILE: BORGCalendar/install/src/main/resources/licenses/LICENSE.jnlf ================================================ JNLF Icons License: Copyright 2000 by Sun Microsystems, Inc. All Rights Reserved. Sun grants you ("Licensee") a non-exclusive, royalty free, license to use, and redistribute this software graphics artwork, as individual graphics or as a collection, as part of software code or programs that you develop, provided that i) this copyright notice and license accompany the software graphics artwork; and ii) you do not utilize the software graphics artwork in a manner which is disparaging to Sun. Unless enforcement is prohibited by applicable law, you may not modify the graphics, and must use them true to color and unmodified in every way. This software graphics artwork is provided "AS IS," without a warranty of any kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE GRAPHICS ARTWORK. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE GRAPHICS ARTWORK, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. If any of the above provisions are held to be in violation of applicable law, void, or unenforceable in any jurisdiction, then such provisions are waived to the extent necessary for this Disclaimer to be otherwise enforceable in such jurisdiction. ================================================ FILE: BORGCalendar/install/src/main/resources/licenses/THIRD-PARTY.txt ================================================ Lists of 56 third-party dependencies. (GNU General Public License - Version 2) common (BORGCalendar:common:2.0 - http://mbcsoft.com/common) (GNU General Public License - Version 2) model (BORGCalendar:model:2.0 - http://mbcsoft.com/model) (The Apache License, Version 2.0) FlatLaf (com.formdev:flatlaf:3.7 - https://github.com/JFormDesigner/FlatLaf) (The Apache License, Version 2.0) FlatLaf IntelliJ Themes Pack (com.formdev:flatlaf-intellij-themes:3.7 - https://github.com/JFormDesigner/FlatLaf) (The Apache Software License, Version 2.0) Google APIs Client Library for Java (com.google.api-client:google-api-client:2.8.1 - https://github.com/googleapis/google-api-java-client/google-api-client) (The Apache Software License, Version 2.0) Calendar API v3-rev20251028-2.0.0 (com.google.apis:google-api-services-calendar:v3-rev20251028-2.0.0 - http://nexus.sonatype.org/oss-repository-hosting.html/google-api-services-calendar) (The Apache Software License, Version 2.0) Google Drive API v3-rev20251114-2.0.0 (com.google.apis:google-api-services-drive:v3-rev20251114-2.0.0 - http://nexus.sonatype.org/oss-repository-hosting.html/google-api-services-drive) (The Apache Software License, Version 2.0) Google Tasks API v1-rev20251102-2.0.0 (com.google.apis:google-api-services-tasks:v1-rev20251102-2.0.0 - http://nexus.sonatype.org/oss-repository-hosting.html/google-api-services-tasks) (BSD New license) Google Auth Library for Java - Credentials (com.google.auth:google-auth-library-credentials:1.30.0 - https://github.com/googleapis/google-auth-library-java/google-auth-library-credentials) (BSD New license) Google Auth Library for Java - OAuth2 HTTP (com.google.auth:google-auth-library-oauth2-http:1.30.0 - https://github.com/googleapis/google-auth-library-java/google-auth-library-oauth2-http) (Apache 2.0) AutoValue Annotations (com.google.auto.value:auto-value-annotations:1.11.0 - https://github.com/google/auto/tree/main/value) (The Apache Software License, Version 2.0) FindBugs-jsr305 (com.google.code.findbugs:jsr305:3.0.2 - http://findbugs.sourceforge.net/) (Apache-2.0) Gson (com.google.code.gson:gson:2.11.0 - https://github.com/google/gson) (Apache 2.0) error-prone annotations (com.google.errorprone:error_prone_annotations:2.35.1 - https://errorprone.info/error_prone_annotations) (The Apache Software License, Version 2.0) Guava InternalFutureFailureAccess and InternalFutures (com.google.guava:failureaccess:1.0.2 - https://github.com/google/guava/failureaccess) (Apache License, Version 2.0) Guava: Google Core Libraries for Java (com.google.guava:guava:33.1.0-jre - https://github.com/google/guava) (The Apache Software License, Version 2.0) Guava ListenableFuture only (com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava - https://github.com/google/guava/listenablefuture) (The Apache Software License, Version 2.0) Google HTTP Client Library for Java (com.google.http-client:google-http-client:2.0.0 - https://github.com/googleapis/google-http-java-client/google-http-client) (The Apache Software License, Version 2.0) Apache HTTP transport v2 for the Google HTTP Client Library for Java. (com.google.http-client:google-http-client-apache-v2:2.0.0 - https://github.com/googleapis/google-http-java-client/google-http-client-apache-v2) (The Apache Software License, Version 2.0) GSON extensions to the Google HTTP Client Library for Java. (com.google.http-client:google-http-client-gson:2.0.0 - https://github.com/googleapis/google-http-java-client/google-http-client-gson) (Apache License, Version 2.0) J2ObjC Annotations (com.google.j2objc:j2objc-annotations:3.0.0 - https://github.com/google/j2objc/) (The Apache Software License, Version 2.0) Google OAuth Client Library for Java (com.google.oauth-client:google-oauth-client:1.36.0 - https://github.com/googleapis/google-oauth-java-client/google-oauth-client) (The Apache Software License, Version 2.0) Java 6 (and higher) extensions to the Google OAuth Client Library for Java. (com.google.oauth-client:google-oauth-client-java6:1.39.0 - https://github.com/googleapis/google-oauth-java-client/google-oauth-client-java6) (The Apache Software License, Version 2.0) OAuth 2.0 verification code receiver for Google OAuth Client Library for Java. (com.google.oauth-client:google-oauth-client-jetty:1.39.0 - https://github.com/googleapis/google-oauth-java-client/google-oauth-client-jetty) (EPL 1.0) (MPL 2.0) H2 Database Engine (com.h2database:h2:2.4.240 - https://h2database.com) (Eclipse Distribution License - v 1.0) Old JAXB Core (com.sun.xml.bind:jaxb-core:4.0.6 - https://eclipse-ee4j.github.io/jaxb-ri/) (Eclipse Distribution License - v 1.0) Old JAXB Runtime (com.sun.xml.bind:jaxb-impl:4.0.6 - https://eclipse-ee4j.github.io/jaxb-ri/) (GNU LESSER GENERAL PUBLIC LICENSE) JCalendar (com.toedter:jcalendar:1.4 - http://www.toedter.com/en/jcalendar/) (Apache License, Version 2.0) Apache Commons Codec (commons-codec:commons-codec:1.11 - http://commons.apache.org/proper/commons-codec/) (The Apache Software License, Version 2.0) Commons IO (commons-io:commons-io:2.3 - http://commons.apache.org/io/) (The Apache Software License, Version 2.0) Apache Commons Logging (commons-logging:commons-logging:1.2 - http://commons.apache.org/proper/commons-logging/) (Apache 2.0) io.grpc:grpc-api (io.grpc:grpc-api:1.70.0 - https://github.com/grpc/grpc-java) (Apache 2.0) io.grpc:grpc-context (io.grpc:grpc-context:1.70.0 - https://github.com/grpc/grpc-java) (The Apache License, Version 2.0) OpenCensus (io.opencensus:opencensus-api:0.31.1 - https://github.com/census-instrumentation/opencensus-java) (The Apache License, Version 2.0) OpenCensus (io.opencensus:opencensus-contrib-http-util:0.31.1 - https://github.com/census-instrumentation/opencensus-java) (EDL 1.0) Jakarta Activation API (jakarta.activation:jakarta.activation-api:2.1.4 - https://github.com/jakartaee/jaf-api) (Eclipse Distribution License - v 1.0) Jakarta XML Binding API (jakarta.xml.bind:jakarta.xml.bind-api:4.0.4 - https://github.com/jakartaee/jaxb-api/jakarta.xml.bind-api) (Common Development and Distribution License (CDDL) v1.0) JavaBeans Activation Framework (JAF) (javax.activation:activation:1.1 - http://java.sun.com/products/javabeans/jaf/index.jsp) (GNU General Public License - Version 2 with the class path exception) JavaHelp API (javax.help:javahelp:2.0.05 - https://javahelp.dev.java.net/) (CDDL) (GPLv2+CE) JavaMail API (compat) (javax.mail:mail:1.5.0-b01 - http://kenai.com/projects/javamail/mail) (Eclipse Public License 1.0) JUnit (junit:junit:4.13.2 - http://junit.org) (Apache License, Version 2.0) Apache Commons Collections (org.apache.commons:commons-collections4:4.1 - http://commons.apache.org/proper/commons-collections/) (Apache License, Version 2.0) Apache Commons Lang (org.apache.commons:commons-lang3:3.8.1 - http://commons.apache.org/proper/commons-lang/) (Apache License, Version 2.0) Apache HttpClient (org.apache.httpcomponents:httpclient:4.5.14 - http://hc.apache.org/httpcomponents-client-ga) (Apache License, Version 2.0) Apache HttpCore (org.apache.httpcomponents:httpcore:4.4.16 - http://hc.apache.org/httpcomponents-core-ga) (The MIT License) Checker Qual (org.checkerframework:checker-qual:3.42.0 - https://checkerframework.org/) (GNU Lesser General Public License Version 3) Font Chooser (org.drjekyll:fontchooser:3.1.0 - https://github.com/dheid/fontchooser) (EDL 1.0) Angus Activation Registries (org.eclipse.angus:angus-activation:2.0.3 - https://github.com/eclipse-ee4j/angus-activation/angus-activation) (New BSD License) Hamcrest Core (org.hamcrest:hamcrest-core:1.3 - https://github.com/hamcrest/JavaHamcrest/hamcrest-core) (iCal4j - License) ical4j (org.mnode.ical4j:ical4j:2.2.5 - http://ical4j.github.io) (iCal4j - License) ical4j-vcard (org.mnode.ical4j:ical4j-vcard:1.0.1 - http://ical4j.github.io) (The MIT License) Project Lombok (org.projectlombok:lombok:1.18.38 - https://projectlombok.org) (MIT License) JCL 1.1.1 implemented over SLF4J (org.slf4j:jcl-over-slf4j:1.7.14 - http://www.slf4j.org) (MIT License) SLF4J API Module (org.slf4j:slf4j-api:1.7.25 - http://www.slf4j.org) (BSD 3-clause) ThreeTen backport (org.threeten:threetenbp:1.3.6 - https://www.threeten.org/threetenbp) (The Apache Software License, Version 2.0) SQLite JDBC (org.xerial:sqlite-jdbc:3.51.1.0 - https://github.com/xerial/sqlite-jdbc) ================================================ FILE: BORGCalendar/install/src/main/resources/licenses/apache 2.0 - apache-2.0.html ================================================ Apache License, Version 2.0 – Open Source Initiative

Apache License, Version 2.0

Version 2.0Submitted: February 8, 2004Submitter: Kevin Coar SPDX short identifier: Apache-2.0

Open Source Initiative Approved License

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:

  1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
  2. You must cause any modified files to carry prominent notices stating that You changed the files; and
  3. 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
  4. 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.

================================================ FILE: BORGCalendar/install/src/main/resources/licenses/bsd 3-clause - license.txt ================================================ Copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * 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. * Neither the name of JSR-310 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. ================================================ FILE: BORGCalendar/install/src/main/resources/licenses/bsd new license - bsd-3-clause.html ================================================ The 3-Clause BSD License – Open Source Initiative

The 3-Clause BSD License

SPDX short identifier: BSD-3-Clause

Open Source Initiative Approved License

Note: This license has also been called the “New BSD License” or “Modified BSD License”. See also the 2-clause BSD License.

Copyright <YEAR> <COPYRIGHT HOLDER>

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 holder 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 HOLDER 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.


================================================ FILE: BORGCalendar/install/src/main/resources/licenses/cddl - cddl.html ================================================ Hardware | Oracle

Oracle Hardware

Oracle hardware includes a full suite of scalable engineered systems, servers, and storage that let enterprises optimize application and database performance, protect crucial data, and lower costs. Organizations improve database performance, simplify management, and lower costs with exclusive features and automated operations that aren’t available with other solutions.

Introducing Exadata X11M (17:12)

Modernize Oracle AI Database environments

Find out how telcos are modernizing mission-critical systems to improve operational efficiency.

Accelerate infrastructure deployment with Oracle Private Cloud Appliance

Understand how to use appliances to accelerate innovation.

Oracle hardware benefits

Oracle AI Database runs faster and more efficiently

Oracle hardware lets IT teams deploy optimized solutions in customer data centers and easy-to-manage appliances in remote offices and edge environments. Solutions with full-stack integration and optimizations let customers run Oracle AI Database up to 10X faster with Oracle Exadata’s Smart Scan query offload.

Watch NTT DOCOMO’s story (0:48)

Easy integration with Oracle’s public cloud

Built-in Oracle Cloud Infrastructure (OCI) integrations make it easy for organizations to develop and deploy cloud native applications across OCI and customer data centers, store data in the public cloud, and simplify both data protection and cloud migrations. Oracle Cloud Observability and Management Platform provides IT teams with the information they need to understand and manage all the layers of their IT stack, no matter where it’s located.

Enhanced availability and data protection

Oracle IT infrastructure helps organizations increase the availability of their mission-critical Oracle databases and applications. Fault-tolerant, scale-out designs and built-in capabilities simplify the implementation of Oracle Maximum Availability Architecture (MAA) best practices, letting customers achieve up to 99.999% availability with Oracle Exadata in MAA configurations, as described in IDC’s analysis (PDF).

Watch Exelon’s story (1:28)

Lower costs with high performance consolidation

Oracle hardware lowers the cost of running on-premises workloads by reducing the number of systems required, delivering higher performance per software license, and reducing IT staff workloads. Oracle Private Cloud Appliance lets customers consolidate containerized, cloud native applications—and those running natively on multiple operating systems—onto a single platform while Cloud@Customer solutions let organizations benefit from consumption-based economics in their own data centers.

Analyst report: Autonomous AI Database on Exadata Cloud@Customer reduces TCO by 47% (PDF)

Watch Hyundai Home Shopping Group's story (1:48)

Oracle hardware products

The best Oracle AI Database platform

Oracle Exadata's full-stack architecture improves the performance, scale, and availability of an enterprise’s Oracle databases. Exadata gives you choice and flexibility in terms of where to run your Oracle AI Database workloads, with availability on Oracle Cloud Infrastructure (OCI); multicloud environments with AWS, Azure, and Google Cloud; a hybrid cloud in your data center; and with on-premises deployments.

Features
  • A full-stack, integrated solution reduces integration requirements.
  • A high-availability infrastructure maximizes database uptime.
  • A scalable design enables database consolidation for organizations of any size.
  • Full compatibility across on-premises, hybrid cloud, OCI, and multicloud deployments simplifies moving to the cloud.
  • Intelligent storage increases database performance and controls costs.
  • SQL read latency of less than 14 microseconds improves OLTP responsiveness.
  • Up to 7 TB/sec SQL throughput accelerates data-intensive analytics applications.
  • Up to 22.4 million SQL I/O operations per second per rack increases throughput for consolidated workloads.

Pre-built and optimized for crucial enterprise workloads

Oracle Engineered Systems are integrated, full-stack solutions that are developed with Oracle AI Database and applications to run customer workloads faster, at lower costs, and with greater security than multivendor, on-premises solutions. Scalable designs enable enterprises to consolidate existing IT infrastructure and quickly adjust to surges in demand, while management automation reduces administrative workloads and helps control costs.

Features
  • Complete solutions eliminate multivendor infrastructure integration
  • Full-stack quarterly patching cuts patching workload by over 80% (PDF)
  • Reliable edge appliances reduce downtime in remote locations by up to up to 99% as described by IDC
  • Cloud data-protection and migration capabilities make it easy to protect data and move to the cloud
  • Incremental scaling easily supports growing application and database requirements
  • Trusted partition licensing cuts software costs by up to 85%
  • Continuous protection for crucial Oracle databases

Secure application infrastructure

Oracle’s x86 and SPARC servers run enterprise applications in on-premises data centers and edge environments with high performance, security, reliability, and efficiency. Enterprise Java, Oracle AI Database, and application workloads run at peak performance and with efficient virtualization while the inclusion of operating system and virtualization software at no addition charge lower total cost of ownership (TCO).

Features
  • Entry-level to high-end servers for scale-up, scale-out, and edge deployments
  • SPARC servers meet enterprise needs for reliable and cost-effective UNIX solutions
  • Oracle Linux or Oracle Solaris and Oracle VM are included at no cost with every Oracle x86 server
  • Proven Solaris operating system guaranteed to run existing SPARC/Solaris applications into the future
  • Redundant designs with hot-swappable components increase Oracle AI Database and application availability
  • Integrated encryption, application memory protection, and compliance auditing improve data and system security
  • Oracle Solaris and multiple forms of virtualization are included at no cost with every Oracle SPARC server

High performance storage

Oracle’s high performance enterprise storage is optimized for Oracle workloads and cloud with unmatched TCO for active storage, data protection, and archive. Leading, large-scale enterprises continue to choose Oracle storage to run their applications faster, provides superior protection against cyberattacks, and securely preserve their long-term data. Unique integration with the Oracle AI Database and Oracle Cloud Infrastructure provide unmatched efficiency, simplicity, and performance.

Features
  • Unified file, block, and object storage meets customers active storage needs
  • Up to 8 PB of all-flash storage for latency-sensitive applications
  • Up to 18 GB/Sec throughput accelerates data-warehouse and data-protection workloads
  • IO prioritization optimizes Oracle AI Database storage performance
  • Data protection solutions with unique Oracle AI Database integrations accelerates recovery of crucial information
  • Tape automation reduces the cost of managing archives by up to 95% (PDF) according to ESG
  • Up to 57 EB of uncompressed capacity and 29 PB/hour throughput under a single pane of glass management provides nearly limitless scalability

View all customer successes

Oracle hardware customer successes

Thousands of organizations worldwide use Oracle hardware to run and protect business-critical databases and applications with high performance, scale, and security while reducing administrative burdens and TCO.

Equinix logo
KCB logo
Exelon
ICBC
Tractor Supply
Halliburton
Toyo Engineering
Evergy logo
Swisscom logo

Swisscom improves operational efficiency and protects databases with Oracle hardware

Oracle hardware use cases

  • Simplify management with cloud capabilities

    Accelerate enterprise applications and databases while reducing IT management workloads with the same database and systems technology as Oracle Cloud Infrastructure.

    Read the Deutsche Bank story

  • Implement an Oracle AI Database private cloud

    Reduce data center complexity by consolidating multiple database workloads on the same Exadata Cloud@Customer infrastructure.

    Read the MONETA Money Bank story

  • Consolidate application infrastructure

    Reduce the number of servers and storage systems required to run application workloads, cut IT management workloads with automation, and lower total cost of ownership by consolidating all aspects of your IT environment with Oracle hardware.

    Read Zonamerica’s story

  • Modernize applications with optimized in-database analytics and machine learning

    Integrate Oracle Machine Learning capabilities into applications, build machine-learning models faster by eliminating data movement, and accelerate business analytics with Oracle Exadata’s optimized in-database capabilities.

    Read Yapi Kredi Bank’s story

  • Protect application and database information enterprisewide

    Protect databases with up to 50X faster backups and 8X faster recoveries while speeding up the protection of all other data with high performance Oracle hardware.

    Watch Energy Transfer’s story (1:24)

January 7, 2025

Introducing Oracle Exadata X11M for Exadata Database Service and Autonomous AI Database

Bob Thome, Vice President, Exadata Product Management

We are excited to announce the immediate availability of Oracle Exadata X11M for cloud deployments. This next-generation intelligent data platform runs Oracle Exadata Database Service and Oracle Autonomous AI Database in the Oracle Cloud, multicloud deployments, and in your data center with Exadata Cloud@Customer.

Get started


Contact an Oracle expert

Find out how Oracle hardware solutions can help your specific business needs.

================================================ FILE: BORGCalendar/install/src/main/resources/licenses/eclipse distribution license - v 1.0 - edl-v10.html ================================================ Eclipse Distribution License | The Eclipse Foundation Skip to main content

Eclipse Distribution License - v 1.0

Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors.

All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  • 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.
  • Neither the name of the Eclipse Foundation, Inc. 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.

OSI Approved
The Eclipse Distribution License is an OSI Approved Open Source License by means of the New BSD License.

 

Purpose

Use of the Eclipse Distribution License by any project at the Eclipse Foundation must be reviewed and unanimously approved by the Board of Directors.

SPDX License Identifier

BSD-3-Clause

Related Links
================================================ FILE: BORGCalendar/install/src/main/resources/licenses/eclipse public license 1.0 - epl-v10.html ================================================ Eclipse Public License - Version 1.0

Eclipse Public License - v 1.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 code and documentation 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 additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.

"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, including all Contributors.

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, in source code and object code form.

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 and object code 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.

3. REQUIREMENTS

A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:

a) it complies with the terms and conditions of this Agreement; and

b) its license agreement:

i) effectively disclaims on behalf of all 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 Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;

iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and

iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.

When the Program is made available in source code form:

a) it must be made available under this Agreement; and

b) a copy of this Agreement must be included with each copy of the Program.

Contributors may not remove or alter any copyright notices contained within the Program.

Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.

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, 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, 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.

This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

================================================ FILE: BORGCalendar/install/src/main/resources/licenses/epl 1.0 - eclipse-1.0.html ================================================ Eclipse Public License -v 1.0 – Open Source Initiative

Eclipse Public License -v 1.0

Version 1.0Submitted: March 8, 2004Submitter: Philip Ma SPDX short identifier: EPL-1.0

Open Source Initiative Approved License

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 code and documentation 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 additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.

“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, including all Contributors.

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, in source code and object code form.

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 and object code 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.

3. REQUIREMENTS

A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:

a) it complies with the terms and conditions of this Agreement; and

b) its license agreement:

i) effectively disclaims on behalf of all 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 Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;

iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and

iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.

When the Program is made available in source code form:

a) it must be made available under this Agreement; and

b) a copy of this Agreement must be included with each copy of the Program.

Contributors may not remove or alter any copyright notices contained within the Program.

Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.

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, 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, 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.

This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.


================================================ FILE: BORGCalendar/install/src/main/resources/licenses/gnu lesser general public license version 3 - lgpl-3.0.en.html ================================================ GNU Lesser General Public License v3.0 - GNU Project - Free Software Foundation

GNU Lesser General Public License

 [LGPLv3 Logo]

Skip to license text

This license is a set of additional permissions added to version 3 of the GNU General Public License. For more information about how to release your own software under this license, please see our page of instructions.


GNU LESSER GENERAL PUBLIC LICENSE

Version 3, 29 June 2007

Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>

Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below.

0. Additional Definitions.

As used herein, “this License” refers to version 3 of the GNU Lesser General Public License, and the “GNU GPL” refers to version 3 of the GNU General Public License.

“The Library” refers to a covered work governed by this License, other than an Application or a Combined Work as defined below.

An “Application” is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library.

A “Combined Work” is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the “Linked Version”.

The “Minimal Corresponding Source” for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version.

The “Corresponding Application Code” for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work.

1. Exception to Section 3 of the GNU GPL.

You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL.

2. Conveying Modified Versions.

If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version:

  • a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or
  • b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy.

3. Object Code Incorporating Material from Library Header Files.

The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following:

  • a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License.
  • b) Accompany the object code with a copy of the GNU GPL and this license document.

4. Combined Works.

You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following:

  • a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License.
  • b) Accompany the Combined Work with a copy of the GNU GPL and this license document.
  • c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document.
  • d) Do one of the following:
    • 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.
    • 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version.
  • e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.)

5. Combined Libraries.

You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following:

  • a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License.
  • b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.

6. Revised Versions of the GNU Lesser General Public License.

The Free Software Foundation may publish revised and/or new versions of the GNU Lesser 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 Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation.

If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library.


Available for this page:

[en] English   [ca] català   [de] Deutsch   [fr] français   [ja] 日本語   [nl] Nederlands   [pt-br] português   [ru] русский   [tr] Türkçe   [uk] українська   [zh-cn] 简体中文   [zh-tw] 繁體中文  

================================================ FILE: BORGCalendar/install/src/main/resources/licenses/ical4j - license - license.txt ================================================ ================== iCal4j - License ================== Copyright (c) 2012, Ben Fortuna All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: o Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. o 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. o Neither the name of Ben Fortuna nor the names of any other 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. ================================================ FILE: BORGCalendar/install/src/main/resources/licenses/mit license - mit-license.html ================================================ The MIT License – Open Source Initiative

The MIT License

Version N/A SPDX short identifier: MIT

Open Source Initiative Approved License

Copyright <YEAR> <COPYRIGHT HOLDER>

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.


================================================ FILE: BORGCalendar/install/src/main/resources/licenses/mpl 2.0 - 2.0.html ================================================ Mozilla Public License, version 2.0

Mozilla Public License
Version 2.0

1. Definitions

1.1. “Contributor”

means each individual or legal entity that creates, contributes to the creation of, or owns Covered Software.

1.2. “Contributor Version”

means the combination of the Contributions of others (if any) used by a Contributor and that particular Contributor’s Contribution.

1.3. “Contribution”

means Covered Software of a particular Contributor.

1.4. “Covered Software”

means Source Code Form to which the initial Contributor has attached the notice in Exhibit A, the Executable Form of such Source Code Form, and Modifications of such Source Code Form, in each case including portions thereof.

1.5. “Incompatible With Secondary Licenses”

means

  1. that the initial Contributor has attached the notice described in Exhibit B to the Covered Software; or

  2. that the Covered Software was made available under the terms of version 1.1 or earlier of the License, but not also under the terms of a Secondary License.

1.6. “Executable Form”

means any form of the work other than Source Code Form.

1.7. “Larger Work”

means a work that combines Covered Software with other material, in a separate file or files, that is not Covered Software.

1.8. “License”

means this document.

1.9. “Licensable”

means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently, any and all of the rights conveyed by this License.

1.10. “Modifications”

means any of the following:

  1. any file in Source Code Form that results from an addition to, deletion from, or modification of the contents of Covered Software; or

  2. any new file in Source Code Form that contains any Covered Software.

1.11. “Patent Claims” of a Contributor

means any patent claim(s), including without limitation, method, process, and apparatus claims, in any patent Licensable by such Contributor that would be infringed, but for the grant of the License, by the making, using, selling, offering for sale, having made, import, or transfer of either its Contributions or its Contributor Version.

1.12. “Secondary License”

means either the GNU General Public License, Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU Affero General Public License, Version 3.0, or any later versions of those licenses.

1.13. “Source Code Form”

means the form of the work preferred for making modifications.

1.14. “You” (or “Your”)

means an individual or a legal entity exercising rights under this License. For legal entities, “You” includes any entity that 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 and Conditions

2.1. Grants

Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:

  1. under intellectual property rights (other than patent or trademark) Licensable by such Contributor to use, reproduce, make available, modify, display, perform, distribute, and otherwise exploit its Contributions, either on an unmodified basis, with Modifications, or as part of a Larger Work; and

  2. under Patent Claims of such Contributor to make, use, sell, offer for sale, have made, import, and otherwise transfer either its Contributions or its Contributor Version.

2.2. Effective Date

The licenses granted in Section 2.1 with respect to any Contribution become effective for each Contribution on the date the Contributor first distributes such Contribution.

2.3. Limitations on Grant Scope

The licenses granted in this Section 2 are the only rights granted under this License. No additional rights or licenses will be implied from the distribution or licensing of Covered Software under this License. Notwithstanding Section 2.1(b) above, no patent license is granted by a Contributor:

  1. for any code that a Contributor has removed from Covered Software; or

  2. for infringements caused by: (i) Your and any other third party’s modifications of Covered Software, or (ii) the combination of its Contributions with other software (except as part of its Contributor Version); or

  3. under Patent Claims infringed by Covered Software in the absence of its Contributions.

This License does not grant any rights in the trademarks, service marks, or logos of any Contributor (except as may be necessary to comply with the notice requirements in Section 3.4).

2.4. Subsequent Licenses

No Contributor makes additional grants as a result of Your choice to distribute the Covered Software under a subsequent version of this License (see Section 10.2) or under the terms of a Secondary License (if permitted under the terms of Section 3.3).

2.5. Representation

Each Contributor represents that the Contributor believes its Contributions are its original creation(s) or it has sufficient rights to grant the rights to its Contributions conveyed by this License.

2.6. Fair Use

This License is not intended to limit any rights You have under applicable copyright doctrines of fair use, fair dealing, or other equivalents.

2.7. Conditions

Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in Section 2.1.

3. Responsibilities

3.1. Distribution of Source Form

All distribution of Covered Software in Source Code Form, including any Modifications that You create or to which You contribute, must be under the terms of this License. You must inform recipients that the Source Code Form of the Covered Software is governed by the terms of this License, and how they can obtain a copy of this License. You may not attempt to alter or restrict the recipients’ rights in the Source Code Form.

3.2. Distribution of Executable Form

If You distribute Covered Software in Executable Form then:

  1. such Covered Software must also be made available in Source Code Form, as described in Section 3.1, and You must inform recipients of the Executable Form how they can obtain a copy of such Source Code Form by reasonable means in a timely manner, at a charge no more than the cost of distribution to the recipient; and

  2. You may distribute such Executable Form under the terms of this License, or sublicense it under different terms, provided that the license for the Executable Form does not attempt to limit or alter the recipients’ rights in the Source Code Form under this License.

3.3. Distribution of a Larger Work

You may create and distribute a Larger Work under terms of Your choice, provided that You also comply with the requirements of this License for the Covered Software. If the Larger Work is a combination of Covered Software with a work governed by one or more Secondary Licenses, and the Covered Software is not Incompatible With Secondary Licenses, this License permits You to additionally distribute such Covered Software under the terms of such Secondary License(s), so that the recipient of the Larger Work may, at their option, further distribute the Covered Software under the terms of either this License or such Secondary License(s).

3.4. Notices

You may not remove or alter the substance of any license notices (including copyright notices, patent notices, disclaimers of warranty, or limitations of liability) contained within the Source Code Form of the Covered Software, except that You may alter any license notices to the extent required to remedy known factual inaccuracies.

3.5. Application of Additional Terms

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 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 every Contributor for any liability incurred by such Contributor as a result of warranty, support, indemnity or liability terms You offer. You may include additional disclaimers of warranty and limitations of liability specific to any jurisdiction.

4. Inability to Comply Due to Statute or Regulation

If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Software due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be placed in a text file included with all distributions of the Covered Software under this License. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.

5. Termination

5.1. The rights granted under this License will terminate automatically if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such Contributor explicitly and finally terminates Your grants, and (b) on an ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the first time You have received notice of non-compliance with this License from such Contributor, and You become compliant prior to 30 days after Your receipt of the notice.

5.2. If You initiate litigation against any entity by asserting a patent infringement claim (excluding declaratory judgment actions, counter-claims, and cross-claims) alleging that a Contributor Version directly or indirectly infringes any patent, then the rights granted to You by any and all Contributors for the Covered Software under Section 2.1 of this License shall terminate.

5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or Your distributors under this License prior to termination shall survive termination.

6. Disclaimer of Warranty

Covered Software is provided under this License on an “as is” basis, without warranty of any kind, either expressed, implied, or statutory, 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 any 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 under this License except under this disclaimer.

7. Limitation of Liability

Under no circumstances and under no legal theory, whether tort (including negligence), contract, or otherwise, shall any Contributor, or anyone who distributes Covered Software as permitted above, be liable to You for any direct, indirect, special, incidental, or consequential damages of any character including, without limitation, damages for lost profits, 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. Litigation

Any litigation relating to this License may be brought only in the courts of a jurisdiction where the defendant maintains its principal place of business and such litigation shall be governed by laws of that jurisdiction, without reference to its conflict-of-law provisions. Nothing in this Section shall prevent a party’s ability to bring cross-claims or counter-claims.

9. Miscellaneous

This License represents the complete agreement concerning the 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. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not be used to construe this License against a Contributor.

10. Versions of the License

10.1. New Versions

Mozilla Foundation is the license steward. Except as provided in Section 10.3, no one other than the license steward has the right to modify or publish new versions of this License. Each version will be given a distinguishing version number.

10.2. Effect of New Versions

You may distribute the Covered Software under the terms of the version of the License under which You originally received the Covered Software, or under the terms of any subsequent version published by the license steward.

10.3. Modified Versions

If you create software not governed by this License, and you want to create a new license for such software, you may create and use a modified version of this License if you rename the license and remove any references to the name of the license steward (except to note that such modified license differs from this License).

10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses

If You choose to distribute Source Code Form that is Incompatible With Secondary Licenses under the terms of this version of the License, the notice described in Exhibit B of this License must be attached.

Exhibit A - Source Code Form License Notice

This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.

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.

Exhibit B - “Incompatible With Secondary Licenses” Notice

This Source Code Form is “Incompatible With Secondary Licenses”, as defined by the Mozilla Public License, v. 2.0.

================================================ FILE: BORGCalendar/install/src/main/resources/licenses/new bsd license - bsd-license.html ================================================ The 2-Clause BSD License – Open Source Initiative

The 2-Clause BSD License

SPDX short identifier: BSD-2-Clause

Open Source Initiative Approved License

Note: This license has also been called the “Simplified BSD License” and the “FreeBSD License”. See also the 3-clause BSD License.

Copyright <YEAR> <COPYRIGHT HOLDER>

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.

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 HOLDER 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.


================================================ FILE: BORGCalendar/install/src/main/resources/licenses/the apache license, version 2.0 - license-2.0.txt ================================================ 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. ================================================ FILE: BORGCalendar/install/src/main/resources/licenses/the apache software license, version 2.0 - license-2.0.txt ================================================ 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. ================================================ FILE: BORGCalendar/install/src/main/resources/licenses/the mit license - license.txt ================================================ Copyright (C) 2009-2021 The Project Lombok Authors. 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. ============================================================================== Licenses for included components: org.ow2.asm:asm org.ow2.asm:asm-analysis org.ow2.asm:asm-commons org.ow2.asm:asm-tree org.ow2.asm:asm-util ASM: a very small and fast Java bytecode manipulation framework 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. ------------------------------------------------------------------------------ rzwitserloot/com.zwitserloot.cmdreader Copyright © 2010 Reinier Zwitserloot. 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. ------------------------------------------------------------------------------ projectlombok/lombok.patcher Copyright (C) 2009-2021 The Project Lombok Authors. 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. ------------------------------------------------------------------------------ ================================================ FILE: BORGCalendar/install/src/main/resources/licenses/the mit license - mit.html ================================================ The MIT License – Open Source Initiative

The MIT License

Version N/A SPDX short identifier: MIT

Open Source Initiative Approved License

Copyright <YEAR> <COPYRIGHT HOLDER>

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.


================================================ FILE: BORGCalendar/install/src/main/resources/run_borg.sh ================================================ cd "%{INSTALL_PATH}" jre/bin/java -Xmx128m -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -Xms24m -jar borg.jar ================================================ FILE: BORGCalendar/install/winpackage.bat ================================================ C:\Users\deskp\Documents\jdk-21.0.2\bin\jpackage -t msi --app-version 2.0.0 -n BorgCalendar --vendor MBCSoft -i target\installer --main-class net.sf.borg.control.Borg --main-jar borg.jar --win-dir-chooser --win-menu --win-menu-group Borg --win-shortcut --icon borg.ico ================================================ FILE: BORGCalendar/model/.gitignore ================================================ /.classpath ================================================ FILE: BORGCalendar/model/pom.xml ================================================ 4.0.0 BORGCalendar BORGCalendar 2.0 model org.projectlombok lombok BORGCalendar common junit junit test com.h2database h2 2.4.240 runtime org.mnode.ical4j ical4j 2.2.5 org.mnode.ical4j ical4j-vcard 1.0.1 org.codehaus.groovy groovy-all jakarta.xml.bind jakarta.xml.bind-api 4.0.4 com.sun.xml.bind jaxb-core 4.0.6 com.sun.xml.bind jaxb-impl 4.0.6 com.google.api-client google-api-client 2.8.1 com.google.oauth-client google-oauth-client-jetty 1.39.0 com.google.apis google-api-services-calendar v3-rev20251207-2.0.0 com.google.apis google-api-services-tasks v1-rev20251102-2.0.0 com.google.apis google-api-services-drive v3-rev20251210-2.0.0 org.xerial sqlite-jdbc 3.51.1.0 ================================================ FILE: BORGCalendar/model/src/main/java/net/sf/borg/model/AddressModel.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2003-2010 by Mike Berger */ package net.sf.borg.model; import jakarta.xml.bind.JAXBContext; import jakarta.xml.bind.Marshaller; import jakarta.xml.bind.Unmarshaller; import jakarta.xml.bind.annotation.XmlRootElement; import net.sf.borg.common.Errmsg; import net.sf.borg.common.Resource; import net.sf.borg.common.Warning; import net.sf.borg.model.db.DBHelper; import net.sf.borg.model.db.EntityDB; import net.sf.borg.model.entity.Address; import net.sf.borg.model.entity.CalendarEntity; import net.sf.borg.model.entity.LabelEntity; import net.sf.borg.model.entity.Link; import net.sf.borg.model.undo.AddressUndoItem; import net.sf.borg.model.undo.UndoLog; import java.io.InputStream; import java.io.Writer; import java.util.*; /** * AddressModel provides the model layer APIs for working with Addresses */ public class AddressModel extends Model implements Searchable
, CalendarEntityProvider { static private final AddressModel self_ = new AddressModel(); /** * class XmlContainer is solely for JAXB XML export/import to keep the same * XML structure as before JAXB was used */ @XmlRootElement(name = "ADDRESSES") private static class XmlContainer { public Collection
Address; } /** * Gets the reference. * * @return the reference */ public static AddressModel getReference() { return (self_); } /** * compute an integer has key from a date * * @param d the date * @return the integer key */ private static int birthdayKey(Date d) { GregorianCalendar g = new GregorianCalendar(); g.setTime(d); return g.get(Calendar.MONTH) * 100 + g.get(Calendar.DATE); } /** * map of birthdays to addresses */ private final HashMap> bdmap_ = new HashMap>(); /** * The db_. */ private final EntityDB
db_; // the database /** * Instantiates a new address model. */ private AddressModel() { db_ = DBHelper.getFactory().createAddressDB(); load_map(); } /** * Delete an Address * * @param addr the Address */ public void delete(Address addr) { delete(addr, false); } /** * Delete an Address. * * @param addr the Address * @param undo true if we are executing an undo */ public void delete(Address addr, boolean undo) { try { Address orig_addr = getAddress(addr.getKey()); LinkModel.getReference().deleteLinksFromEntity(addr); LinkModel.getReference().deleteLinksToEntity(addr); db_.delete(addr.getKey()); // don't store an undo record if we are currently running an undo if (!undo) { UndoLog.getReference().addItem( AddressUndoItem.recordDelete(orig_addr)); } } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } refresh(); } /** * Export all Addresses to XML. * * @param fw the Writer to write XML to * @throws Exception the exception */ @Override public void export(Writer fw) throws Exception { JAXBContext jc = JAXBContext.newInstance(XmlContainer.class); Marshaller m = jc.createMarshaller(); XmlContainer container = new XmlContainer(); container.Address = getAddresses(); m.marshal(container, fw); } /** * Get an Address by key * * @param num the key * @return the address * @throws Exception the exception */ public Address getAddress(int num) throws Exception { return (db_.readObj(num)); } /** * Get all addresses. * * @return the addresses * @throws Exception the exception */ public Collection
getAddresses() throws Exception { Collection
addrs = db_.readAll(); return addrs; } /** * Get all addresses with birthdays on a given day. * * @param d the day * @return the addresses */ public Collection
getAddresses(Date d) { // don't consider year for birthdays int bdkey = birthdayKey(d); return (bdmap_.get(Integer.valueOf(bdkey))); } /** * Gets the dB. * * @return the dB */ @Deprecated public EntityDB
getDB() { return (db_); } /** * Import xml. * * @param is the input stream containing the XML * @throws Exception the exception */ @Override public void importXml(InputStream is) throws Exception { JAXBContext jc = JAXBContext.newInstance(XmlContainer.class); Unmarshaller u = jc.createUnmarshaller(); XmlContainer container = (XmlContainer) u.unmarshal(is); if (container.Address == null) return; // use key from import file if importing into empty db int nextkey = db_.nextkey(); boolean use_keys = nextkey == 1; for (Address addr : container.Address) { if (!use_keys) addr.setKey(nextkey++); try { db_.addObj(addr); } catch (Warning e) { Errmsg.getErrorHandler().notice(e.getMessage() + "\n\n" + addr.toString()); } } refresh(); } /** * populate the map of birthdays */ private void load_map() { // clear map bdmap_.clear(); try { // iterate through tasks using taskmodel Collection
addrs = getAddresses(); for (Address addr : addrs) { // use birthday to build a day key Date bd = addr.getBirthday(); if (bd == null) continue; int bdkey = birthdayKey(bd); // add the task string to the btmap_ // add the task to the mrs_ Vector. This is used by the todo gui LinkedList
o = bdmap_.get(Integer.valueOf(bdkey)); if (o == null) { o = new LinkedList
(); bdmap_.put(Integer.valueOf(bdkey), o); } o.add(addr); } } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); return; } } /** * get a new address object * * @return the address */ public Address newAddress() { return (db_.newObj()); } /** * Refresh the birthday map and notify any listeners that the model has * changed */ public void refresh() { load_map(); refreshListeners(); } /** * Save an address. * * @param addr the address * @throws Exception */ public void saveAddress(Address addr) throws Exception { saveAddress(addr, false); } /** * Save an address. * * @param addr the address * @param undo true if we are executing an undo * @throws Exception */ public void saveAddress(Address addr, boolean undo) throws Exception { int num = addr.getKey(); Address orig_addr = getAddress(addr.getKey()); if (num == -1 || orig_addr == null) { int newkey = db_.nextkey(); if (undo && num != -1 && orig_addr == null) { newkey = num; } addr.setKey(newkey); db_.addObj(addr); if (!undo) { UndoLog.getReference().addItem( AddressUndoItem.recordAdd(addr)); } } else { db_.updateObj(addr); if (!undo) { UndoLog.getReference().addItem( AddressUndoItem.recordUpdate(orig_addr)); } } // inform views of data change refresh(); } /** * Sync with the underlying db */ @Override public void sync() { db_.sync(); refresh(); } /* * (non-Javadoc) * * @see * net.sf.borg.model.Searchable#search(net.sf.borg.model.SearchCriteria) */ @Override public Collection
search(SearchCriteria criteria) { Collection
res = new ArrayList
(); // result collection try { // do not match if a search category is set if (!criteria.getCategory().equals("") && !criteria.getCategory().equals( CategoryModel.UNCATEGORIZED)) return res; // load all addresses into appt list Collection
addresses = getAddresses(); for (Address addr : addresses) { // read each appt String addrString = addr.getFirstName() + " " + addr.getLastName() + " " + addr.getStreetAddress() + " " + addr.getWorkStreetAddress() + " " + addr.getCompany() + " " + addr.getCity() + " " + addr.getCountry() + " " + addr.getWorkCity() + " " + addr.getWorkCountry() + " " + addr.getEmail() + " " + addr.getState() + " " + addr.getWorkState() + " " + addr.getNickname() + " " + addr.getCellPhone(); if (!criteria.search(addrString)) continue; // filter by links if (criteria.hasLinks()) { LinkModel lm = LinkModel.getReference(); try { Collection lnks = lm.getLinks(addr); if (lnks.isEmpty()) continue; } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } } // add the appt to the search results res.add(addr); } } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } return (res); } @Override public String getExportName() { return "ADDRESSES"; } @Override public String getInfo() throws Exception { return Resource.getResourceString("addresses") + ": " + getAddresses().size(); } @Override public List getEntities(Date d) { List ret = new ArrayList(); // add birthdays from address book GregorianCalendar gc = new GregorianCalendar(); gc.setTime(d); Collection
addrs = AddressModel.getReference().getAddresses(d); if (addrs != null) { for (Address addr : addrs) { LabelEntity info = new LabelEntity(); String color = info.getColor(); if (color == null) info.setColor(Theme.BIRTHDAYCOLOR); Date bd = addr.getBirthday(); GregorianCalendar g = new GregorianCalendar(); g.setTime(bd); int bdyear = g.get(Calendar.YEAR); int yrs = gc.get(Calendar.YEAR) - bdyear; if (yrs < 0) continue; String tx = Resource.getResourceString("Birthday") + ": " + addr.getFirstName() + " " + addr.getLastName() + "(" + yrs + ")"; info.setText(tx); info.setDate(d); ret.add(info); } } return ret; } public int removeDuplicates() throws Exception { int dels = 0; Set
addressSet = new HashSet
(); for (Address addr : getAddresses()) { if (addressSet.add(addr) == false){ delete(addr); dels++; } } return dels; } } ================================================ FILE: BORGCalendar/model/src/main/java/net/sf/borg/model/AppointmentModel.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2003-2010 by Mike Berger */ package net.sf.borg.model; import jakarta.xml.bind.JAXBContext; import jakarta.xml.bind.Marshaller; import jakarta.xml.bind.Unmarshaller; import jakarta.xml.bind.annotation.XmlRootElement; import net.sf.borg.common.*; import net.sf.borg.model.CategoryModel.CategorySource; import net.sf.borg.model.db.AppointmentDB; import net.sf.borg.model.db.DBHelper; import net.sf.borg.model.db.EntityDB; import net.sf.borg.model.entity.Appointment; import net.sf.borg.model.entity.Link; import net.sf.borg.model.undo.AppointmentUndoItem; import net.sf.borg.model.undo.UndoLog; import java.io.InputStream; import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; import java.text.SimpleDateFormat; import java.util.*; import java.util.logging.Logger; /** * the appointment model provides the model layer APIs for working with * Appointment Entities * */ public class AppointmentModel extends Model implements Model.Listener, CategorySource, Searchable { static private final Logger log = Logger.getLogger("net.sf.borg"); /** * class XmlContainer is solely for JAXB XML export/import to keep the same XML * structure as before JAXB was used */ @XmlRootElement(name = "APPTS") private static class XmlContainer { public Collection Appointment; } /** The singleton */ static private final AppointmentModel self_ = new AppointmentModel(); /** * Gets the singleton reference. * * @return the singleton reference */ public static AppointmentModel getReference() { return (self_); } /** * Gets the time format to use for all time processing. * * @return the time format */ public static SimpleDateFormat getTimeFormat() { String mt = Prefs.getPref(PrefName.MILTIME); if (mt.equals("true")) { return (new SimpleDateFormat("HH:mm")); } return (new SimpleDateFormat("h:mm a")); } /** * Checks an appointment is a note (not associated with a time of day). * * @param appt * the appointment * * @return true, if it is a note */ public static boolean isNote(Appointment appt) { // return true if the appt Appointment represents a "note" or // "non-timed" appt return appt.getUntimed() != null && appt.getUntimed().equals("Y"); } /** * Checks if an appointment is skipped on a particular date * * @param ap * the Appointment * @param cal * the date * * @return true, if is skipped */ public static boolean isSkipped(Appointment ap, Calendar cal) { int dk = DateUtil.dayOfEpoch(cal.getTime()); String sk = Integer.toString(dk); Vector skv = ap.getSkipList(); return skv != null && skv.contains(sk); } /** The underlying database object */ private final EntityDB db_; /** * map_ contains each "base" day key that has appts and maps it to a list of * appt keys for that day. */ private final HashMap> map_; /** * The vacation map - a map of vacation values for each day (i.e. no vacation, * half-day, full-day) */ private final HashMap vacationMap_; /** * Instantiates a new appointment model. * */ private AppointmentModel() { map_ = new HashMap>(); vacationMap_ = new HashMap(); db_ = DBHelper.getFactory().createAppointmentDB(); // init categories and currentcategories CategoryModel.getReference().addSource(this); CategoryModel.getReference().addListener(this); // scan the DB and build the appt map_ try { buildMap(); } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } } /** * Builds the map (cache) of days to appointments. Also builds the vacation map. * This is not purely for caching as it also maps multiple days to a single * appointment to support repeating appointments * * @throws Exception * the exception */ private void buildMap() throws Exception { // erase the current map map_.clear(); vacationMap_.clear(); // get the year for later GregorianCalendar cal = new GregorianCalendar(); int curyr = cal.get(Calendar.YEAR); // scan entire DB AppointmentDB kf = (AppointmentDB) db_; Collection rptkeys = kf.getRepeatKeys(); for (Appointment appt : getAllAppts()) { if (!CategoryModel.getReference().isShown(appt.getCategory())) { continue; } int dkey = DateUtil.dayOfEpoch(appt.getDate()); // if appt does not repeat, we can add its // key to a single day int key = appt.getKey(); Integer ki = Integer.valueOf(key); if (!rptkeys.contains(ki)) { // get/add entry for the day in the map Collection o = map_.get(Integer.valueOf(dkey)); if (o == null) { o = new LinkedList(); map_.put(Integer.valueOf(dkey), o); } // add the appt key to the day's list o.add(Integer.valueOf(key)); // add day key to vacation map if appt has vacation if (appt.getVacation() != null && appt.getVacation().intValue() != 0) { vacationMap_.put(Integer.valueOf(dkey), appt.getVacation()); } } else { cal.setTime(appt.getDate()); Repeat repeat = new Repeat(cal, appt.getFrequency()); if (!repeat.isRepeating()) continue; int tm = Repeat.calculateTimes(appt); int apptYear = cal.get(Calendar.YEAR); // ok, plod through the repeats now for (int i = 0; i < tm; i++) { Calendar current = repeat.current(); if (current == null) { repeat.next(); continue; } // get the day key for the repeat int rkey = DateUtil.dayOfEpoch(current.getTime()); int cyear = current.get(Calendar.YEAR); // limit the repeats to 10 years if (cyear > curyr + 10 && cyear > apptYear + 10) break; // check if the repeat is in the skip list // if so, skip it if (!isSkipped(appt, current)) { // add the repeat key to the map Collection o = map_.get(Integer.valueOf(rkey)); if (o == null) { o = new LinkedList(); map_.put(Integer.valueOf(rkey), o); } LinkedList l = (LinkedList) o; l.add(Integer.valueOf(key)); // add day key to vacation map if appt has vacation if (appt.getVacation() != null && appt.getVacation().intValue() != 0) { vacationMap_.put(Integer.valueOf(rkey), appt.getVacation()); } } repeat.next(); } } } } /** * Delete an appt. * * @param appt * the appt */ public void delAppt(Appointment appt) { delAppt(appt, false); } /** * Delete an appt. * * @param appt * the appt * @param undo * true if we are executing an undo */ public void delAppt(Appointment appt, boolean undo) { Appointment orig_appt = null; try { orig_appt = getAppt(appt.getKey()); LinkModel.getReference().deleteLinksFromEntity(appt); LinkModel.getReference().deleteLinksToEntity(appt); db_.delete(appt.getKey()); if (!undo) { UndoLog.getReference().addItem(AppointmentUndoItem.recordDelete(orig_appt)); } } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } // even if delete fails - still refresh cache info // and tell listeners - db failure may have been due to // a sync causing a record already deleted error // this needs to be reflected in the map try { // recreate the appointment hashmap buildMap(); // refresh all views that are displaying appt data from this // model refreshListeners(new ChangeEvent(appt, ChangeEvent.ChangeAction.DELETE)); } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); return; } } /** * Delete an appt by key. * * @param key * the key */ public void delAppt(int key) { try { Appointment appt = getAppt(key); if (appt != null) delAppt(appt); } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } } /** * delete one occurrence of a repeating appointment * * @param key * the appointment key * @param rptDate * the date of the repeat to be deleted */ public void delOneOnly(int key, Date rptDate) { try { int rkey = DateUtil.dayOfEpoch(rptDate); Appointment appt = db_.readObj(key); // get the list of repeats that have been deleted - the SKip // list Vector vect = appt.getSkipList(); if (vect == null) vect = new Vector(); // add the current appt key to the SKip list vect.add(Integer.toString(rkey)); appt.setSkipList(vect); saveAppt(appt, false); // if we are deleting the next todo then do it Date nt = appt.getNextTodo(); if (nt == null) nt = appt.getDate(); if (rkey == DateUtil.dayOfEpoch(nt)) { do_todo(appt.getKey(), false); } } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); return; } } /** * Mark a todo appointment as done. If the appointment repeats, adjust the next * todo value. If the todo is all done (including repeats), optionally delete it * * @param key * the appointment key * @param del * if true, delete the todo when all done. Otherwise, mark it as no * longer being a todo. * * @throws Exception * the exception */ public void do_todo(int key, boolean del) throws Exception { this.do_todo(key, del, null); } /** * find the date of the next un-skipped todo occurrence, if any * * @param appt - the appointment * * @param date - the date of the occurrence to start from. if null, the next one is used. * * @return date of the next todo occurrence or null if none */ public Date next_todo(Appointment appt, Date date) { if( !appt.isTodo()) return null; // curtodo is the date of the todo that is to be "done" Date curtodo = appt.getNextTodo(); Date d = appt.getDate(); if (curtodo == null) { curtodo = d; } if (date != null) curtodo = date; // newtodo will be the name of the next todo occurrence (if the todo // repeats and is not done) Date newtodo = null; int tm = Repeat.calculateTimes(appt); String rpt = Repeat.getFreq(appt.getFrequency()); // find next to do if it repeats by doing calendar math if (tm > 1 && rpt != null && Repeat.isRepeating(appt)) { Calendar ccal = new GregorianCalendar(); Calendar ncal = new GregorianCalendar(); // ccal is the current todo and ncal is the original appt date // ncal will be incremented until we find the todo after the // one in ccal ccal.setTime(curtodo); ncal.setTime(d); Repeat repeat = new Repeat(ncal, appt.getFrequency()); for (int i = 1; i < tm; i++) { if (ncal != null && ncal.get(Calendar.YEAR) == ccal.get(Calendar.YEAR) && ncal.get(Calendar.MONTH) == ccal.get(Calendar.MONTH) && ncal.get(Calendar.DATE) == ccal.get(Calendar.DATE)) { while (true) { ncal = repeat.next(); if (ncal == null) break; if (isSkipped(appt, ncal)) continue; newtodo = ncal.getTime(); break; } break; } ncal = repeat.next(); } } return newtodo; } /** * Mark a todo appointment as done. If the appointment repeats, adjust the next * todo value. If the todo is all done (including repeats), optionally delete it * * @param key * the appointment key * @param del * if true, delete the todo when all done. Otherwise, mark it as no * longer being a todo. * @param date * date of the repeat that is being marked as done. If null, then the * next todo is the one. If set, then all todos up to and including * the date are marked as done. * * @throws Exception * the exception */ public void do_todo(int key, boolean del, Date date) throws Exception { // read the DB row for the ToDo Appointment appt = db_.readObj(key); Date newtodo = next_todo(appt, date); if (newtodo != null) { // a next todo was found, set NT to that value // and don't delete the appt appt.setNextTodo(newtodo); saveAppt(appt, false); } else { // there is no next todo - shut off the todo // unless the user wants it deleted. if so, delete it. if (del) { delAppt(appt); } else { // this needs to be a delete and add for caldav since a task is being changed to an event and caldasv won't delete the task Appointment newEvent = appt.copy(); newEvent.setKey(-1); newEvent.setUid(null); newEvent.setTodo(false); newEvent.setColor("strike"); // strike the text to indicate a done // todo saveAppt(newEvent, false); delAppt(appt); } } } /** * Export appointments as XML. * * @param fw * the Writer to write XML to * * @throws Exception * the exception */ @Override public void export(Writer fw) throws Exception { JAXBContext jc = JAXBContext.newInstance(XmlContainer.class); Marshaller m = jc.createMarshaller(); XmlContainer container = new XmlContainer(); container.Appointment = getAllAppts(); m.marshal(container, fw); } /** * Gets all appointments that are marked as todos. * * @return the todos */ public Collection get_todos() { ArrayList av = new ArrayList(); try { // iterate through appts in the DB AppointmentDB kf = (AppointmentDB) db_; Collection keycol = kf.getTodoKeys(); // Collection keycol = AppointmentHelper.getTodoKeys(db_); for (Integer ki : keycol) { int key = ki.intValue(); // read the full appt from the DB and add to the vector Appointment appt = db_.readObj(key); // if category set, filter appts if (!CategoryModel.getReference().isShown(appt.getCategory())) { continue; } av.add(appt); } } catch (Exception ee) { Errmsg.getErrorHandler().errmsg(ee); } return (av); } /** * Get all appts. * * @return all appts * * @throws Exception * the exception */ public Collection getAllAppts() throws Exception { Collection appts = db_.readAll(); return appts; } /** * Gets an appt by key. * * @param key * the key * * @return the appt * * @throws Exception * the exception */ public Appointment getAppt(int key) throws Exception { Appointment appt = db_.readObj(key); return (appt); } /** * Get a list of appointment ids for a given day * * @param d * the date * * @return the appts */ public List getAppts(Date d) { return ((List) map_.get(Integer.valueOf(DateUtil.dayOfEpoch(d)))); } /* * (non-Javadoc) * * @see net.sf.borg.model.CategoryModel.CategorySource#getCategories() */ @Override public Collection getCategories() { TreeSet dbcat = new TreeSet(); dbcat.add(CategoryModel.UNCATEGORIZED); try { for (Appointment ap : getAllAppts()) { String cat = ap.getCategory(); if (cat != null && !cat.equals("")) dbcat.add(cat); } } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } return (dbcat); } /** * Gets the underlying dB. * * @return the dB */ @Deprecated public EntityDB getDB() { return (db_); } /** * Import xml. * * @param is * the input stream containing the XML * * @throws Exception * the exception */ @Override public void importXml(InputStream is) throws Exception { JAXBContext jc = JAXBContext.newInstance(XmlContainer.class); Unmarshaller u = jc.createUnmarshaller(); XmlContainer container = (XmlContainer) u.unmarshal(is); if (container.Appointment == null) return; try { // use key from import file if importing into empty db int nextkey = db_.nextkey(); boolean use_keys = nextkey == 1; for (Appointment appt : container.Appointment) { if (!use_keys) appt.setKey(nextkey++); // validate priority if (appt.getPriority() != null && (appt.getPriority() > 10 || appt.getPriority() < 1)) { appt.setPriority(null); log.warning("XML Import: Ignoring invalid priority for appointment: " + appt.getKey() + ":" + appt.getClearText()); } if (appt.getCreateTime() == null) appt.setCreateTime(new Date()); if (appt.getLastMod() == null) appt.setLastMod(new Date()); db_.addObj(appt); } } catch (Exception e) { Errmsg.getErrorHandler().notice(e + "\n" + Resource.getResourceString("Import_XML_error")); e.printStackTrace(); } // rebuild the hashmap buildMap(); CategoryModel.getReference().sync(); // refresh all views that are displaying appt data from this model refreshListeners(); } /** * create a new appointment. * * @return the appointment */ public Appointment newAppt() { Appointment appt = db_.newObj(); return (appt); } /* * (non-Javadoc) * * @see net.sf.borg.model.Model.Listener#refresh() */ @Override public void update(ChangeEvent event) { refresh(); } public void refresh() { try { buildMap(); } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } // refresh all views that are displaying appt data from this model refreshListeners(); } /** * Save an appointment. * * @param r * the appointment */ public void saveAppt(Appointment r) { saveAppt(r, false); } /** * Save an appointment. * * @param r * the appointment * @param undo * true if we are executing an undo */ public void saveAppt(Appointment r, boolean undo) { ChangeEvent.ChangeAction action = ChangeEvent.ChangeAction.ADD; try { Appointment orig_appt = null; if (r.getKey() != -1) orig_appt = getAppt(r.getKey()); if (orig_appt == null) { // if undo is adding back record - force the key to // be what is in the record if (!undo) { r.setKey(db_.nextkey()); } r.setCreateTime(new Date()); r.setLastMod(r.getCreateTime()); if (r.getUid() == null) r.setUid(r.getKey() + "@BORGA-" + r.getLastMod().getTime()); db_.addObj(r); if (!undo) { UndoLog.getReference().addItem(AppointmentUndoItem.recordAdd(r)); } } else { if (r.getCreateTime() == null) r.setCreateTime(new Date()); r.setLastMod(new Date()); if (r.getUid() == null) r.setUid(r.getKey() + "@BORGA-" + r.getLastMod().getTime()); action = ChangeEvent.ChangeAction.CHANGE; db_.updateObj(r); if (!undo) { UndoLog.getReference().addItem(AppointmentUndoItem.recordUpdate(orig_appt)); } } // update category list String cat = r.getCategory(); if (cat != null && !cat.equals("")) CategoryModel.getReference().addCategory(cat); } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } try { // recreate the appointment hashmap buildMap(); // refresh all views that are displaying appt data from this // model refreshListeners(new ChangeEvent(r, action)); } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); return; } } /** * Sync with the db. */ @Override public void sync() { db_.sync(); try { // recreate the appointment hashmap buildMap(); // refresh all views that are displaying appt data from this // model refreshListeners(); } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); return; } } /** * determine the number of vacation days up to and including the given day in a * particular year * * @param d * the Date * * @return the double */ public double vacationCount(Date d) { Calendar cal = new GregorianCalendar(); cal.setTime(d); cal.set(Calendar.DATE, 1); cal.set(Calendar.MONTH, Calendar.JANUARY); int dk = DateUtil.dayOfEpoch(d); int yearStartKey = DateUtil.dayOfEpoch(cal.getTime()); double count = 0; Set vkeys = vacationMap_.keySet(); for (Integer i : vkeys) { int vdaykey = i.intValue(); if (vdaykey >= yearStartKey && vdaykey <= dk) { Integer vnum = vacationMap_.get(i); if (vnum.intValue() == 2) { count += 0.5; } else { count += 1.0; } } } return count; } /** * save the default appointment in the prefs * * @param appt * the appointment */ public void saveDefaultAppointment(Appointment appt) { try { JAXBContext jc = JAXBContext.newInstance(Appointment.class); Marshaller m = jc.createMarshaller(); StringWriter sw = new StringWriter(); m.marshal(appt, sw); Prefs.putPref(PrefName.DEFAULT_APPT, sw.toString()); } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } } /** * get the default appointment from prefs * * @return the default appointment */ public static Appointment getDefaultAppointment() { String defApptXml = Prefs.getPref(PrefName.DEFAULT_APPT); if (!defApptXml.equals("")) { try { JAXBContext jc = JAXBContext.newInstance(Appointment.class); Unmarshaller u = jc.createUnmarshaller(); String xmlString = defApptXml; Appointment ap = (Appointment) u.unmarshal(new StringReader(xmlString)); // transition from pre-1.7.2 if (ap.getDate() == null) return null; return ap; } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } } return null; } /* * (non-Javadoc) * * @see net.sf.borg.model.Searchable#search(net.sf.borg.model.SearchCriteria) */ @Override public Collection search(SearchCriteria criteria) { Collection res = new ArrayList(); // result // collection try { // load all appts into appt list Collection allappts = getAllAppts(); for (Appointment appt : allappts) { // read each appt // if category set, filter appts if (!CategoryModel.getReference().isShown(appt.getCategory())) { continue; } // do not search on encrypted appts if (appt.isEncrypted()) continue; String tx = appt.getText(); Date d = appt.getDate(); if (d == null || tx == null) continue; if (!criteria.search(tx)) continue; // filter by repeat if (criteria.isRepeating() && !appt.isRepeatFlag()) continue; // filter todos if (criteria.isTodo() && !appt.isTodo()) continue; // filter by vacation Integer ii = appt.getVacation(); if (criteria.isVacation() && (ii == null || ii.intValue() != 1)) continue; // filter by holiday ii = appt.getHoliday(); if (criteria.isHoliday() && (ii == null || ii.intValue() != 1)) continue; // filter by category if (criteria.getCategory().equals(CategoryModel.UNCATEGORIZED) && appt.getCategory() != null && !appt.getCategory().equals(CategoryModel.UNCATEGORIZED)) continue; else if (!criteria.getCategory().equals("") && !criteria.getCategory().equals(CategoryModel.UNCATEGORIZED) && !criteria.getCategory().equals(appt.getCategory())) continue; // filter by start date if (criteria.getStartDate() != null) { if (appt.getDate().before(criteria.getStartDate())) continue; } // filter by end date if (criteria.getEndDate() != null) { if (appt.getDate().after(criteria.getEndDate())) continue; } // filter by links if (criteria.hasLinks()) { LinkModel lm = LinkModel.getReference(); try { Collection lnks = lm.getLinks(appt); if (lnks.isEmpty()) continue; } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } } // add the appt to the search results res.add(appt); } } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } return (res); } @Override public String getExportName() { return "APPTS"; } @Override public String getInfo() throws Exception { return Resource.getResourceString("appointments") + ": " + getAllAppts().size(); } public List getAppointmentsByText(String text) throws Exception { AppointmentDB apdb = (AppointmentDB) db_; return apdb.getAppointmentsByText(text); } public Appointment getApptByUid(String uid) throws Exception { AppointmentDB apdb = (AppointmentDB) db_; return apdb.getAppointmentByUid(uid); } } ================================================ FILE: BORGCalendar/model/src/main/java/net/sf/borg/model/CalendarEntityProvider.java ================================================ package net.sf.borg.model; import net.sf.borg.model.entity.CalendarEntity; import java.util.Date; import java.util.List; public interface CalendarEntityProvider { List getEntities(Date d); } ================================================ FILE: BORGCalendar/model/src/main/java/net/sf/borg/model/CategoryModel.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2003 by Mike Berger */ package net.sf.borg.model; import net.sf.borg.common.Resource; import java.io.InputStream; import java.io.Serializable; import java.io.Writer; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; import java.util.TreeSet; /** * The Class CategoryModel manages Categories. Categories are not entities, they are plain text strings. * Categories do not exist outside of other Entities. This class maintains a cache of category information * in memory but does not persist it. It recreates this information from the category-aware models as needed. */ public class CategoryModel extends Model { /** * interface implemented by Models whose entities contain categories */ interface CategorySource { /** * Gets the list of all categories from all entities in the source model * * @return the categories */ Collection getCategories(); } static class CategoryComparator implements Comparator, Serializable { private static final long serialVersionUID = 1L; @Override public int compare(String o1, String o2) { if( o1.compareTo(o2) == 0) return 0; if( o1.equals(UNCATEGORIZED)) return -1; if( o2.equals(UNCATEGORIZED)) return 1; return( o1.compareTo(o2)); } } /** The singleton */ static private final CategoryModel self_ = new CategoryModel(); /** a non-null value to represent the lack of a category */ static public final String UNCATEGORIZED = Resource .getResourceString("uncategorized"); /** * Gets the singleton reference. * * @return the reference */ public static CategoryModel getReference() { return (self_); } /** The collection of all categories_. */ private final Collection categories_ = new TreeSet(new CategoryComparator()); /** The categories that are being shown (i.e. that are not being hidden) */ private Collection shownCategories_ = new TreeSet(new CategoryComparator()); /** The set of category source models */ Collection sources = new ArrayList(); /** * Add all categories from a collection to the cache * * @param cats the categories */ private void addAll(Collection cats) { categories_.addAll(cats); shownCategories_.addAll(cats); } /** * Add a category to the cache. * * @param cat the categories */ public void addCategory(String cat) { categories_.add(cat); refreshListeners(); } /** * Add a category source. * * @param s the source */ public void addSource(CategorySource s) { sources.add(s); addAll(s.getCategories()); } /** * Get all categories. * * @return the categories * * @throws Exception the exception */ public Collection getCategories() throws Exception { ArrayList cats = new ArrayList(); cats.addAll(categories_); return (cats); } /** * Get the shown categories. * * @return the shown categories */ public Collection getShownCategories() { ArrayList cats = new ArrayList(); cats.addAll(shownCategories_); return (cats); } /** * Checks if a category is being shown. * * @param cat the cat * * @return true, if is shown */ public boolean isShown(String cat) { return (shownCategories_.contains((cat == null || cat.equals("")) ? CategoryModel.UNCATEGORIZED : cat)) ; } /* * (non-Javadoc) * * @see net.sf.borg.model.Model#remove() */ @Override public void remove() { // empty } /** * delete a category from the model, but not from the db * @param cat */ public void deleteCategory(String cat) { categories_.remove(cat); shownCategories_.remove(cat); refreshListeners(); } /** * Sets the set of shown categories. * * @param cats the shown categories */ public void setShownCategories(Collection cats) { shownCategories_ = cats; refreshListeners(); } /** * Show all categories. */ public void showAll() { shownCategories_.clear(); shownCategories_.addAll(categories_); refreshListeners(); } /** * Show a particular category. * * @param cat the category to show */ public void showCategory(String cat) { shownCategories_.add(cat); } /** * Sync categories with the sources (clears the cache and re-reads the list of categories). * * @throws Exception the exception */ @Override public void sync() { Collection oldCategories = new TreeSet(new CategoryComparator()); oldCategories.addAll(categories_); categories_.clear(); for( CategorySource s : sources ) { categories_.addAll(s.getCategories()); } // show any newly discovered categories for( String s : categories_) { if( !oldCategories.contains(s)) { this.showCategory(s); } } this.refreshListeners(); } @Override public void export(Writer fw) throws Exception { // nothing to export } @Override public void importXml(InputStream is) throws Exception { // nothing to import } @Override public String getExportName() { return null; } @Override public String getInfo() throws Exception { return Resource.getResourceString("Categories") + ":" + getCategories().size(); } } ================================================ FILE: BORGCalendar/model/src/main/java/net/sf/borg/model/CheckListModel.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2003-2010 by Mike Berger */ package net.sf.borg.model; import jakarta.xml.bind.JAXBContext; import jakarta.xml.bind.Marshaller; import jakarta.xml.bind.Unmarshaller; import jakarta.xml.bind.annotation.XmlRootElement; import net.sf.borg.common.Errmsg; import net.sf.borg.common.Resource; import net.sf.borg.model.db.CheckListDB; import net.sf.borg.model.db.DBHelper; import net.sf.borg.model.entity.CheckList; import net.sf.borg.model.undo.CheckListUndoItem; import net.sf.borg.model.undo.UndoLog; import java.io.InputStream; import java.io.Writer; import java.util.Collection; /** * The CheckList Model manages the CheckList Entities. CheckLists are keyed by a name. CheckLists contain simple text and * have stayed simple to be able to sync with the simple checkList functionality of a Palm Pilot. */ public class CheckListModel extends Model { /** * class XmlContainer is solely for JAXB XML export/import * to keep the same XML structure as before JAXB was used */ @XmlRootElement(name="CHECKLISTS") private static class XmlContainer { public Collection CheckList; } /** The db */ private final CheckListDB db_; // the database /** The singleton */ static private final CheckListModel self_ = new CheckListModel(); /** * Gets the singleton. * * @return the singleton */ public static CheckListModel getReference() { return (self_); } /** * Gets the dB. * * @return the dB */ public CheckListDB getDB() { return db_; } /** * Gets all checkLists. * * @return all checkLists * * @throws Exception the exception */ public Collection getCheckLists() throws Exception { return db_.readAll(); } /** * Gets all checkList names. * * @return the checkList names * * @throws Exception the exception */ public Collection getNames() throws Exception { return db_.getNames(); } /** * Instantiates a new checkList model. */ private CheckListModel() { db_ = DBHelper.getFactory().createCheckListDB(); } /** * Delete a checkList by name * * @param name the checkList name * @param undo true if we are executing an undo */ public void delete(String name, boolean undo) { try { CheckList m = getCheckList(name); LinkModel.getReference().deleteLinksToEntity(m); if (m == null) return; CheckList orig = m.clone(); db_.delete(m.getCheckListName()); if (!undo) { UndoLog.getReference().addItem(CheckListUndoItem.recordDelete(orig)); } } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } refresh(); } /** * Save a checkList. * * @param checkList the checkList */ public void saveCheckList(CheckList checkList) { saveCheckList(checkList, false); } /** * Save a checkList. * * @param checkList the checkList * @param undo true if we are executing an undo */ public void saveCheckList(CheckList checkList, boolean undo) { try { String name = checkList.getCheckListName(); CheckList old = db_.readCheckList(name); if (old == null) { db_.addCheckList(checkList); if (!undo) { UndoLog.getReference() .addItem(CheckListUndoItem.recordAdd(checkList)); } } else { db_.updateCheckList(checkList); if (!undo) { UndoLog.getReference().addItem( CheckListUndoItem.recordUpdate(old)); } } } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } // inform views of data change refresh(); } /** * Gets a checkList by name. * * @param name the checkList name * * @return the checkList * * @throws Exception the exception */ public CheckList getCheckList(String name) throws Exception { return db_.readCheckList(name); } /** * Export to XML * * @param fw the writer to write XML to * * @throws Exception the exception */ @Override public void export(Writer fw) throws Exception { JAXBContext jc = JAXBContext.newInstance(XmlContainer.class); Marshaller m = jc.createMarshaller(); XmlContainer container = new XmlContainer(); container.CheckList = getCheckLists(); m.marshal(container, fw); } /** * Import xml. * * @param is the input stream containing the XML * * @throws Exception the exception */ @Override public void importXml(InputStream is) throws Exception { JAXBContext jc = JAXBContext.newInstance(XmlContainer.class); Unmarshaller u = jc.createUnmarshaller(); XmlContainer container = (XmlContainer)u.unmarshal( is ); if( container.CheckList == null ) return; for (CheckList checkList : container.CheckList ) { saveCheckList(checkList,true); } refresh(); } /** * Refresh listeners */ public void refresh() { refreshListeners(); } @Override public String getExportName() { return "CHECKLISTS"; } @Override public String getInfo() throws Exception { return Resource.getResourceString("CheckLists") + ": " + getCheckLists().size(); } } ================================================ FILE: BORGCalendar/model/src/main/java/net/sf/borg/model/Day.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2003 by Mike Berger */ /* * Day.java * * Created on January 1, 2004, 10:19 PM */ package net.sf.borg.model; import net.sf.borg.common.DateUtil; import net.sf.borg.common.PrefName; import net.sf.borg.common.Prefs; import net.sf.borg.common.Resource; import net.sf.borg.model.entity.Appointment; import net.sf.borg.model.entity.CalendarEntity; import net.sf.borg.model.entity.LabelEntity; import java.io.Serializable; import java.util.*; /** * Class Day pulls together and manages all of the items that make up the * CalendarEntities for a single day. It packages together all of a day's info * as needed by a client (i.e. the UI). * */ public class Day { /** * class to compare appointment strings for sorting. */ private static class apcompare implements Comparator, Serializable { private static final long serialVersionUID = 1L; /* * (non-Javadoc) * * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ @Override public int compare(CalendarEntity so1, CalendarEntity so2) { String s1 = so1.getText(); String s2 = so2.getText(); String psort = Prefs.getPref(PrefName.PRIORITY_SORT); if (psort.equals("true")) { Integer p1 = so1.getPriority(); Integer p2 = so2.getPriority(); if( p1 != null && p2 != null ) { if( p1.intValue() != p2.intValue()) return (p1.intValue() > p2.intValue() ? 1 : -1); } else if (p1 != null) return -1; else if (p2 != null) return 1; } // use appt time of day (not date - due to repeats) to sort next // appts with a time come before notes Date dt1 = null; Date dt2 = null; if (so1 instanceof Appointment && !AppointmentModel.isNote((Appointment) so1)) { Calendar cal = new GregorianCalendar(); cal.setTime(so1.getDate()); cal.set(1, 1, 2000); dt1 = cal.getTime(); } if (so2 instanceof Appointment && !AppointmentModel.isNote((Appointment) so2)) { Calendar cal = new GregorianCalendar(); cal.setTime(so2.getDate()); cal.set(1, 1, 2000); dt2 = cal.getTime(); } if (dt1 != null && dt2 != null) return (dt1.after(dt2) ? 1 : -1); if (dt1 != null) return -1; if (dt2 != null) return 1; // if we got here, just compare // strings lexicographically int res = s1.compareTo(s2); if (res != 0) return (res); return (1); } } /** * Adds appointments to the to day. * * @param day * the day * @param l * list of appointment keys to add * @throws Exception * the exception */ private static void addToDay(Day day, Collection l) throws Exception { boolean pub = true; boolean priv = false; //String sp = Prefs.getPref(PrefName.SHOWPUBLIC); //if (sp.equals("true")) //pub = true; String sp = Prefs.getPref(PrefName.SHOWPRIVATE); if (sp.equals("true")) priv = true; if (l != null) { Iterator it = l.iterator(); Appointment appt; // iterate through the day's appts while (it.hasNext()) { Integer ik = it.next(); // read the appt from the DB appt = AppointmentModel.getReference().getAppt(ik.intValue()); // skip based on public/private flags if (appt.isPrivate()) { if (!priv) continue; } else { if (!pub) continue; } // only show current todo if( Prefs.getBoolPref(PrefName.TODO_ONLY_SHOW_CURRENT) ) { if( appt.isTodo() && appt.getNextTodo() != null && DateUtil.dayOfEpoch(day.cal.getTime()) > DateUtil.dayOfEpoch(appt.getNextTodo())) { continue; } if( appt.isTodo() && appt.getNextTodo() == null && Repeat.isRepeating(appt) && DateUtil.dayOfEpoch(day.cal.getTime()) != DateUtil.dayOfEpoch(appt.getDate())) { continue; } } String color = appt.getColor(); if (color == null) appt.setColor(Theme.COLOR4); // add apptto day day.addItem(appt); // set vacation and holiday flags at dayinfo level Integer v = appt.getVacation(); if (v != null && v.intValue() != 0) day.setVacation(v.intValue()); v = appt.getHoliday(); if (v != null && v.intValue() == 1) day.setHoliday(1); } } } /** * Gets the Day information for a given day. * * @param year * the year * @param month * the month * @param day * the day * @return the Day object * * @throws Exception * the exception */ public static Day getDay(int year, int month, int day) throws Exception { // get the base day key Calendar cal = new GregorianCalendar(year, month, day); Day ret = new Day(cal); // get the list of appt keys from the map_ Collection l = AppointmentModel.getReference().getAppts( cal.getTime()); addToDay(ret, l); // daylight savings time GregorianCalendar gc = new GregorianCalendar(year, month, day, 11, 00); boolean dstNow = TimeZone.getDefault().inDaylightTime(gc.getTime()); gc.add(Calendar.DATE, -1); boolean dstYesterday = TimeZone.getDefault().inDaylightTime( gc.getTime()); if (dstNow && !dstYesterday) { LabelEntity hol = new LabelEntity(); hol.setColor(Theme.COLOR4); hol.setText(Resource.getResourceString("Daylight_Savings_Time")); ret.addItem(hol); } else if (!dstNow && dstYesterday) { LabelEntity hol = new LabelEntity(); hol.setColor(Theme.COLOR4); hol.setText(Resource.getResourceString("Standard_Time")); ret.addItem(hol); } // add canned US holidays // check user preferences first String show_us_hols = Prefs.getPref(PrefName.SHOWUSHOLIDAYS); if (show_us_hols.equals("true")) { // ok, we will add holiday appts // to the dayinfo for the US holidays below // the dayinfo.holiday flag is set if the holiday // is a day off from work and should cause the day to have // holiday coloring on the gui // // so, holidays only exist in the dayinfo objects, which are // temporary. they do not get added to the DB or even the appt // map_ LabelEntity hol = new LabelEntity(); hol.setDate(new GregorianCalendar(year, month, day, 00, 00) .getTime()); hol.setColor(Theme.HOLIDAYCOLOR); hol.setText(null); if (month == 9 && day == 31) { hol.setText(Resource.getResourceString("Halloween")); } else if (month == 6 && day == 4) { hol.setText(Resource.getResourceString("Independence_Day")); ret.setHoliday(1); } else if (month == 1 && day == 2) { hol.setText(Resource.getResourceString("Ground_Hog_Day")); } else if (month == 1 && day == 14) { hol.setText(Resource.getResourceString("Valentine's_Day")); } else if (month == 2 && day == 17) { hol.setText(Resource.getResourceString("St._Patrick's_Day")); } else if (month == 10 && day == 11) { hol.setText(Resource.getResourceString("Veteran's_Day")); } else if (month == 8 && day == nthdom(year, month, Calendar.MONDAY, 1)) { hol.setText(Resource.getResourceString("Labor_Day")); ret.setHoliday(1); } else if (month == 0 && day == nthdom(year, month, Calendar.MONDAY, 3)) { hol.setText(Resource .getResourceString("Martin_Luther_King_Day")); } else if (month == 1 && day == nthdom(year, month, Calendar.MONDAY, 3)) { hol.setText(Resource.getResourceString("Presidents_Day")); } else if (month == 4 && day == nthdom(year, month, Calendar.MONDAY, -1)) { hol.setText(Resource.getResourceString("Memorial_Day")); ret.setHoliday(1); } else if (month == 9 && day == nthdom(year, month, Calendar.MONDAY, 2)) { hol.setText(Resource.getResourceString("Columbus_Day")); } else if (month == 4 && day == nthdom(year, month, Calendar.SUNDAY, 2)) { hol.setText(Resource.getResourceString("Mother's_Day")); } else if (month == 5 && day == nthdom(year, month, Calendar.SUNDAY, 3)) { hol.setText(Resource.getResourceString("Father's_Day")); } else if (month == 10 && day == nthdom(year, month, Calendar.THURSDAY, 4)) { hol.setText(Resource.getResourceString("Thanksgiving")); ret.setHoliday(1); } if (hol.getText() != null) ret.addItem(hol); } // add canned Canadian holidays // check user preferences first String show_can_hols = Prefs.getPref(PrefName.SHOWCANHOLIDAYS); if (show_can_hols.equals("true")) { LabelEntity hol = new LabelEntity(); hol.setDate(new GregorianCalendar(year, month, day, 00, 00) .getTime()); hol.setColor(Theme.HOLIDAYCOLOR); hol.setText(null); if (month == 6 && day == 1) { hol.setText(Resource.getResourceString("Canada_Day")); } else if (month == 11 && day == 26) { hol.setText(Resource.getResourceString("Boxing_Day")); } else if (month == 7 && day == nthdom(year, month, Calendar.MONDAY, 1)) { hol.setText(Resource.getResourceString("Civic_Holiday")); } else if (month == 10 && day == 11) { hol.setText(Resource.getResourceString("Remembrance_Day")); } else if (month == 8 && day == nthdom(year, month, Calendar.MONDAY, 1)) { hol.setText(Resource.getResourceString("Labour_Day_(Can)")); } else if (month == 2 && day == nthdom(year, month, Calendar.MONDAY, 2)) { hol.setText(Resource.getResourceString("Commonwealth_Day")); } else if (month == 9 && day == nthdom(year, month, Calendar.MONDAY, 2)) { hol.setText(Resource.getResourceString("Thanksgiving_(Can)")); } else if (month == 4) { gc = new GregorianCalendar(year, month, 25); int diff = gc.get(Calendar.DAY_OF_WEEK); diff += 5; if (diff > 7) diff -= 7; if (day == 25 - diff) { hol.setText(Resource.getResourceString("Victoria_Day")); } } if (hol.getText() != null) ret.addItem(hol); } // common holidays if (show_can_hols.equals("true") || show_us_hols.equals("true")) { LabelEntity hol = new LabelEntity(); hol.setDate(new GregorianCalendar(year, month, day, 00, 00) .getTime()); hol.setColor(Theme.HOLIDAYCOLOR); hol.setText(null); if (month == 0 && day == 1) { hol.setText(Resource.getResourceString("New_Year's_Day")); ret.setHoliday(1); } else if (month == 11 && day == 25) { hol.setText(Resource.getResourceString("Christmas")); ret.setHoliday(1); } if (hol.getText() != null) ret.addItem(hol); } for( Model m : Model.getExistingModels()) { if( m instanceof CalendarEntityProvider) { List el = ((CalendarEntityProvider) m).getEntities(cal.getTime()); for( CalendarEntity e : el ) ret.addItem(e); } } return (ret); } /** * compute nth day of month for calculating when certain holidays fall. * * @param year * the year * @param month * the month * @param dayofweek * the day of the week * @param week * the week of the month * * @return the date */ private static int nthdom(int year, int month, int dayofweek, int week) { GregorianCalendar cal = new GregorianCalendar(year, month, 1); cal.set(Calendar.DAY_OF_WEEK, dayofweek); cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, week); return (cal.get(Calendar.DATE)); } private int holiday; // set to indicate if any appt in the list is a private final TreeSet items; // list of appts for the day private int vacation; // vacation value for the day private final Calendar cal; /** * Instantiates a new day. */ private Day(Calendar cal) { holiday = 0; vacation = 0; items = new TreeSet(new apcompare()); this.cal = cal; } /** * Adds a CalendarEntity item to the Day * * @param info * the CalendarEntity */ private void addItem(CalendarEntity info) { items.add(info); } /** * Gets the holiday flag. * * @return the holiday (1 = holiday) */ public int getHoliday() { return (holiday); } /** * Gets all CalendarEntity items for the Day. * * @return the items */ public Collection getItems() { return (items); } /** * Gets the vacation value for the Day. * * @return the vacation value (0 = none, 1 = full day, 2 = half day) */ public int getVacation() { return (vacation); } /** * Sets the holiday value * * @param i * the new holiday value */ public void setHoliday(int i) { holiday = i; } /** * Sets the vacation value * * @param i * the new vacation value */ public void setVacation(int i) { vacation = i; } } ================================================ FILE: BORGCalendar/model/src/main/java/net/sf/borg/model/EmailReminder.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2003 by Mike Berger */ /* * popups.java * * Created on January 16, 2004, 3:08 PM */ package net.sf.borg.model; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Collection; import java.util.Date; import java.util.GregorianCalendar; import java.util.StringTokenizer; import java.util.logging.Logger; import net.sf.borg.common.PrefName; import net.sf.borg.common.Prefs; import net.sf.borg.common.Resource; import net.sf.borg.common.SendJavaMail; import net.sf.borg.model.entity.Appointment; import net.sf.borg.model.entity.CalendarEntity; import net.sf.borg.model.entity.Subtask; import net.sf.borg.model.entity.Task; /** * this class handles the daily email reminder */ public class EmailReminder { static private final Logger log = Logger.getLogger("net.sf.borg"); /** * Checks if entity should be shown as strike-through on a certain date. * * @param appt the entity * @param date the date * * @return true, if is strike */ private static boolean isStrike(CalendarEntity appt, Date date) { return (appt.getColor() != null && appt.getColor().equals("strike")) || (appt.isTodo() && !(appt.getNextTodo() == null || !appt.getNextTodo().after(date))); } static public boolean needToSendDailyEmail() { // check if the email feature has been enabled String email = Prefs.getPref(PrefName.EMAILENABLED); if (email.equals("false")) return false; // get the SMTP host and address String host = Prefs.getPref(PrefName.EMAILSERVER); String addr = Prefs.getPref(PrefName.EMAILADDR); if (host.equals("") || addr.equals("")) return false; Calendar cal = new GregorianCalendar(); int doy = -1; // get the last day that email was sent int lastday = Prefs.getIntPref(PrefName.EMAILLAST); // if email was already sent today - don't send again doy = cal.get(Calendar.DAY_OF_YEAR); if (doy == lastday) return false; return true; } static public void sendDailyEmailReminder(Calendar emailday, String passwd) throws Exception { sendDailyEmailReminder(emailday, false, passwd); } /** * Send daily email reminder. * * @param emailday the emailday * * @param forceResend resend the daily email, even if it was already sent * * @throws Exception the exception */ static public void sendDailyEmailReminder(Calendar emailday, boolean forceResend, String passwd) throws Exception { // check if the email feature has been enabled String email = Prefs.getPref(PrefName.EMAILENABLED); if (email.equals("false")) return; // get the SMTP host and address String host = Prefs.getPref(PrefName.EMAILSERVER); String addr = Prefs.getPref(PrefName.EMAILADDR); String from = Prefs.getPref(PrefName.EMAILFROM); if (host.equals("") || addr.equals("")) return; Calendar cal = new GregorianCalendar(); // if no date passed in, the timer has gone off and we need to check if // we // can send // email now int doy = -1; if (emailday == null) { // get the last day that email was sent int lastday = Prefs.getIntPref(PrefName.EMAILLAST); // if email was already sent today - don't send again doy = cal.get(Calendar.DAY_OF_YEAR); if (doy == lastday && forceResend == false) return; // create the calendar model key for tomorrow cal.add(Calendar.DATE, 1); } else { // just send email for the requested day cal = emailday; } // tx is the contents of the email String ap_tx = "Appointments for " + DateFormat.getDateInstance().format(cal.getTime()) + ":\n"; StringBuffer tx = new StringBuffer(); // get the list of appts for the requested day Collection l = AppointmentModel.getReference().getAppts(cal.getTime()); if (l != null) { Appointment appt; // iterate through the day's appts for (Integer ik : l) { try { // read the appointment from the calendar model appt = AppointmentModel.getReference().getAppt(ik.intValue()); // get the appt flags to see if the appointment is private // if so, don't include it in the email if (appt.isPrivate()) continue; // skip strike through items if (isStrike(appt, cal.getTime())) continue; if (!AppointmentModel.isNote(appt)) { // add the appointment time to the email if it is not a // note Date d = appt.getDate(); SimpleDateFormat df = AppointmentModel.getTimeFormat(); tx.append(df.format(d) + " "); } // add the appointment text if (appt.isEncrypted()) tx.append(Resource.getResourceString("EncryptedItemShort")); else { // only show first line of appointment text String s = appt.getText(); int ii = s.indexOf('\n'); if (ii != -1) { tx.append(s, 0, ii); } else { tx.append(s); } } tx.append("\n"); } catch (Exception e) { log.severe(e.toString()); return; } } } // load any task tracker items for the email Collection tasks = TaskModel.getReference().get_tasks(cal.getTime()); if (tasks != null) { for (Task task : tasks) { // add each task to the email - and remove newlines tx.append("Task[" + task.getKey() + "] "); tx.append(task.getSummary()); tx.append("\n"); } } Collection subtasks = TaskModel.getReference().get_subtasks(cal.getTime()); if (subtasks != null) { for (Subtask subtask : subtasks) { // add each task to the email - and remove newlines tx.append("Subtask[" + subtask.getKey() + "] "); tx.append(subtask.getDescription()); tx.append("\n"); } } // add any outstanding todos Collection todos = AppointmentModel.getReference().get_todos(); StringBuffer tdbuf = new StringBuffer(); for (Appointment todo : todos) { Date nt = todo.getNextTodo(); if (nt == null) { nt = todo.getDate(); } Calendar tdcal = new GregorianCalendar(); tdcal.setTime(nt); tdcal.set(Calendar.SECOND, 59); tdcal.set(Calendar.MINUTE, 59); tdcal.set(Calendar.HOUR_OF_DAY, 23); if (tdcal.before(cal)) { if (!AppointmentModel.isNote(todo)) { // add the appointment time to the email if it is not a // note Date d = todo.getDate(); SimpleDateFormat df = AppointmentModel.getTimeFormat(); tdbuf.append(df.format(d) + " "); } // add the appointment text if (todo.isEncrypted()) tdbuf.append(Resource.getResourceString("EncryptedItemShort")); else { // only show first line of appointment text String s = todo.getText(); int ii = s.indexOf('\n'); if (ii != -1) { tdbuf.append(s, 0, ii); } else { tdbuf.append(s); } } tdbuf.append("\n"); } } tasks = TaskModel.getReference().get_tasks(); if (tasks != null) { for (Task task : tasks) { if (TaskModel.isClosed(task)) continue; Date d = task.getDueDate(); if (d != null) { Calendar tdcal = new GregorianCalendar(); tdcal.setTime(d); tdcal.set(Calendar.SECOND, 59); tdcal.set(Calendar.MINUTE, 59); tdcal.set(Calendar.HOUR_OF_DAY, 23); if (tdcal.before(cal)) { tdbuf.append("Task[" + task.getKey() + "] "); tdbuf.append(task.getSummary()); tdbuf.append("\n"); } } } } subtasks = TaskModel.getReference().getSubTasks(); if (subtasks != null) { for (Subtask subtask : subtasks) { Date d = subtask.getDueDate(); if (d != null && subtask.getCloseDate() == null) { Calendar tdcal = new GregorianCalendar(); tdcal.setTime(d); tdcal.set(Calendar.SECOND, 59); tdcal.set(Calendar.MINUTE, 59); tdcal.set(Calendar.HOUR_OF_DAY, 23); if (tdcal.before(cal)) { tdbuf.append("Subtask[" + subtask.getKey() + "] "); tdbuf.append(subtask.getDescription()); tdbuf.append("\n"); } } } } if (!tdbuf.toString().equals("")) { tx.append("\n\n"); tx.append(Resource.getResourceString("OverDue")); tx.append("\n" + tdbuf); } // send the email using SMTP if (!tx.toString().equals("")) { String stx = ap_tx + tx; StringTokenizer stk = new StringTokenizer(addr, ",;"); while (stk.hasMoreTokens()) { String a = stk.nextToken(); String f; if (from == null || from.isEmpty()) f = a.trim(); else f = from; if (!a.equals("")) { SendJavaMail.sendMail(host, stx, Resource.getResourceString("Reminder_Notice"), f, a.trim(), Prefs.getPref(PrefName.EMAILUSER), passwd); } } } else { log.info("Skipping email"); } // record that we sent email today if (doy != -1) Prefs.putPref(PrefName.EMAILLAST, Integer.valueOf(doy)); return; } } ================================================ FILE: BORGCalendar/model/src/main/java/net/sf/borg/model/ExportImport.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2003-2010 by Mike Berger */ package net.sf.borg.model; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.util.Date; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; /** * contains common import/export utilities * */ public class ExportImport { /** * Export all models to XML files inside a time-stamped zipfile. * * @param dir * the directory to create the zip file in * @throws Exception */ public static void exportToZip(String dir) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); String uniq = sdf.format(new Date()); String backupFilename = dir + "/borg" + uniq + ".zip"; ZipOutputStream out = new ZipOutputStream(new FileOutputStream( backupFilename)); Writer fw = new OutputStreamWriter(out, StandardCharsets.UTF_8); for (Model model : Model.getExistingModels()) { // links must be last if (model instanceof LinkModel) { continue; } if (model.getExportName() == null) continue; out.putNextEntry(new ZipEntry(model.getExportName() + ".xml")); model.export(fw); fw.flush(); out.closeEntry(); } // links must be last for import to work out.putNextEntry(new ZipEntry(LinkModel.getReference().getExportName() + ".xml")); LinkModel.getReference().export(fw); fw.flush(); out.closeEntry(); out.close(); } /** * Import from a single xml input stream. * * @param model * the Model to use for the import * @param is * the input stream * @throws Exception */ public static void importFromXmlFile(Model model, InputStream is) throws Exception { model.importXml(is); // show any newly imported categories CategoryModel.getReference().sync(); CategoryModel.getReference().showAll(); } /** * get the model that can import the given XML * * @param in * - BufferedReader for the XML * @return the Model * @throws IOException */ public static Model getImportModelForXML(BufferedReader in) throws IOException { for (int i = 0; i < 10; i++) { String line = in.readLine(); if (line != null) { for (Model model : Model.getExistingModels()) { if (model.getExportName() != null && line.contains(model.getExportName())) { in.close(); return model; } } } } in.close(); return null; } /** * OMG - the JAXB unmarshaller keeps closing the entire Zip Input Stream * after unmarshalling a single entry. Need to define this horrible class to * prevent this. Actually it is pretty elegant compared to other options - * like using temp files or reading entire entries into memory to clone * streams * */ private static class UncloseableZipInputStream extends ZipInputStream { public UncloseableZipInputStream(InputStream in) { super(in); } @Override public void close() { // do nothing - prevent the stream from being closed } public void myClose() throws IOException { super.close(); } } /** * Import an entire backup Zip file * * @param zipFileName * the backup file name * @throws Exception */ static public void importFromZip(String zipFileName) throws Exception { UncloseableZipInputStream in = new UncloseableZipInputStream( new FileInputStream(zipFileName)); // force loading of LinkModel in case the UI hasn't had reason to load // it LinkModel.getReference(); // assumes that links are last entry for (ZipEntry entry = in.getNextEntry(); entry != null; entry = in .getNextEntry()) { boolean import_done = false; for (Model model : Model.getExistingModels()) { if (entry.getName().equals(model.getExportName() + ".xml")) { importFromXmlFile(model, in); import_done = true; break; } } if (import_done == false) { throw new Exception("Unknown file in ZIP - " + entry.getName() + " ...skipping"); } } // really close the zip file in.myClose(); } } ================================================ FILE: BORGCalendar/model/src/main/java/net/sf/borg/model/LinkModel.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2003 by Mike Berger */ package net.sf.borg.model; import jakarta.xml.bind.JAXBContext; import jakarta.xml.bind.Marshaller; import jakarta.xml.bind.Unmarshaller; import jakarta.xml.bind.annotation.XmlRootElement; import net.sf.borg.common.Errmsg; import net.sf.borg.common.PrefName; import net.sf.borg.common.Prefs; import net.sf.borg.common.Resource; import net.sf.borg.model.db.DBHelper; import net.sf.borg.model.db.EntityDB; import net.sf.borg.model.db.LinkDB; import net.sf.borg.model.entity.*; import java.io.*; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; /** * LinkModel manages the Link Entities, which are associations between BORG * Entities and other BORG Entities, files, and URLs. */ public class LinkModel extends Model { /** * class XmlContainer is solely for JAXB XML export/import to keep the same * XML structure as before JAXB was used */ @XmlRootElement(name = "LINKS") private static class XmlContainer { public Collection Link; } /** * LinkType holds the various link types. The string values are for legacy * reasons */ public enum LinkType { FILELINK("file"), ATTACHMENT("attachment"), URL("url"), APPOINTMENT( "appointment"), MEMO("memo"), PROJECT("project"), TASK("task"), ADDRESS( "address"), CHECKLIST("net.sf.borg.ui.checklist"); private final String value; LinkType(String n) { value = n; } @Override public String toString() { return value; } } /** The singleton */ static private final LinkModel self_ = new LinkModel(); /** map of entity types to class names */ private static final HashMap, LinkType> typemap = new HashMap, LinkType>(); static { // owner types typemap.put(Appointment.class, LinkType.APPOINTMENT); typemap.put(Memo.class, LinkType.MEMO); typemap.put(Task.class, LinkType.TASK); typemap.put(Address.class, LinkType.ADDRESS); typemap.put(Project.class, LinkType.PROJECT); typemap.put(CheckList.class, LinkType.CHECKLIST); } /** * get the folder where attachments are stored * * @return the attachment folder path */ public static String attachmentFolder() { String dbtype = Prefs.getPref(PrefName.DBTYPE); if (dbtype.equals("h2")) { String path = Prefs.getPref(PrefName.H2DIR) + "/attachments"; File f = new File(path); if (!f.exists()) { if (!f.mkdir()) { Errmsg.getErrorHandler() .notice(Resource .getResourceString("att_folder_err") + path); return null; } } return path; } if (dbtype.equals("sqlite")) { String path = Prefs.getPref(PrefName.SQLITEDIR) + "/attachments"; File f = new File(path); if (!f.exists()) { if (!f.mkdir()) { Errmsg.getErrorHandler() .notice(Resource .getResourceString("att_folder_err") + path); return null; } } return path; } if( dbtype.equals("jdbc")) { String url = Prefs.getPref(PrefName.JDBCURL); if( url.startsWith("jdbc:sqlite:") && url.contains("/")){ String path = url.substring(12, url.lastIndexOf('/')) + "/attachments"; File f = new File(path); if (!f.exists()) { if (!f.mkdir()) { Errmsg.getErrorHandler() .notice(Resource .getResourceString("att_folder_err") + path); return null; } } return path; } } return null; } /** * Gets the singleton. * * @return the singleton */ public static LinkModel getReference() { return (self_); } /** The db */ private final EntityDB db_; // the database /** * Adds a link. * * @param owner * the owning Entity * @param pathIn * the path (url, filepath, or entity key) * @param linkType * the link type * * @throws Exception * the exception */ public void addLink(KeyedEntity owner, String pathIn, LinkType linkType) throws Exception { String path = pathIn; if (owner == null) { Errmsg.getErrorHandler().notice( Resource.getResourceString("att_owner_null")); return; } if (linkType == LinkType.ATTACHMENT) { String atfolder = attachmentFolder(); if (atfolder == null) throw new Exception("attachments not supported"); // need to copy file and create new path File orig = new File(path); String fname = orig.getName(); String newpath = atfolder + "/" + fname; int i = 1; while (true) { File newfile = new File(newpath); if (!newfile.exists()) break; fname = i + orig.getName(); newpath = atfolder + "/" + fname; i++; } copyFile(path, newpath); path = fname; } Link at = newLink(); at.setKey(-1); at.setOwnerKey(Integer.valueOf(owner.getKey())); LinkType type = typemap.get(owner.getClass()); if (type == null) throw new Exception("illegal link owner type"); at.setOwnerType(type.toString()); at.setPath(path); at.setLinkType(linkType.toString()); saveLink(at); // * modification for backtrace/2way link if (linkType == LinkType.APPOINTMENT || linkType == LinkType.PROJECT || linkType == LinkType.TASK) { Link at2way = newLink(); at2way.setKey(-1); at2way.setOwnerKey(Integer.valueOf(at.getPath())); at2way.setOwnerType(at.getLinkType()); at2way.setPath(at.getOwnerKey().toString()); at2way.setLinkType(at.getOwnerType()); saveLink(at2way); } /** * Allows backtrace/2way link modification for address link if address * is not owners */ // Fixes bug linking an address to itself results in a double link else if (linkType == LinkType.ADDRESS ) { if (!(owner instanceof Address) || !at.getOwnerKey().toString().equals(at.getPath())) { Link at2way = newLink(); at2way.setKey(-1); at2way.setOwnerKey(Integer.valueOf(at.getPath())); at2way.setOwnerType(at.getLinkType()); at2way.setPath(at.getOwnerKey().toString()); at2way.setLinkType(at.getOwnerType()); saveLink(at2way); } } // end of modification } /** * Copy a file. * * @param fromFile * the from file * @param toFile * the to file * * @throws Exception * the exception */ private static void copyFile(String fromFile, String toFile) throws Exception { FileInputStream from = null; FileOutputStream to = null; try { from = new FileInputStream(fromFile); to = new FileOutputStream(toFile); byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = from.read(buffer)) != -1) to.write(buffer, 0, bytesRead); // write } finally { if (from != null) try { from.close(); } catch (IOException e) { // empty } if (to != null) try { to.close(); } catch (IOException e) { // empty } } } /** * Delete a link * * @param key * the key * * @throws Exception * the exception */ public void delete(int key) throws Exception { Link l = getLink(key); delete(l); } /** * Delete a link * * @param l * the Link * * @throws Exception * the exception */ public void delete(Link l) throws Exception { if (l.getLinkType().equals(LinkType.ATTACHMENT.toString())) { // delete attached file File f = new File(attachmentFolder() + "/" + l.getPath()); f.delete(); } db_.delete(l.getKey()); refresh(); } /** * Delete links for an owning entity * * @param owner * the owning entity object * * @throws Exception * the exception */ public void deleteLinksFromEntity(KeyedEntity owner) throws Exception { Collection atts = getLinks(owner); Iterator it = atts.iterator(); while (it.hasNext()) { Link at = it.next(); delete(at); } } /** * Delete links that target a given entity * * @param target * the target entity object * * @throws Exception * the exception */ public void deleteLinksToEntity(Object target) throws Exception { if (target == null) return; LinkType type = typemap.get(target.getClass()); if (type == null) return; Collection links = getLinks(); for (Link link : links) { if (link.getLinkType().equals(type.toString())) { if ((type == LinkType.MEMO && ((Memo) target).getMemoName() .equals(link.getPath())) || (type == LinkType.CHECKLIST && ((CheckList) target) .getCheckListName().equals(link.getPath()))) { delete(link); } else if (target instanceof KeyedEntity) { int key = ((KeyedEntity) target).getKey(); if (link.getPath().equals(Integer.toString(key))) { delete(link); } } } } } /** * Export links to XML * * @param fw * the writer to write XML to * * @throws Exception * the exception */ @Override public void export(Writer fw) throws Exception { JAXBContext jc = JAXBContext.newInstance(XmlContainer.class); Marshaller m = jc.createMarshaller(); XmlContainer container = new XmlContainer(); container.Link = getLinks(); m.marshal(container, fw); } /** * Gets the dB. * * @return the dB */ public EntityDB getDB() { return (db_); } /** * Gets a link. * * @param key * the key * * @return the link * * @throws Exception * the exception */ public Link getLink(int key) throws Exception { return db_.readObj(key); } /** * Gets all links. * * @return all links * * @throws Exception * the exception */ public Collection getLinks() throws Exception { return db_.readAll(); } /** * Gets the links for an owning entity * * @param ownerbean * the owning entity * * @return the links * * @throws Exception * the exception */ public Collection getLinks(KeyedEntity ownerbean) throws Exception { LinkDB adb = (LinkDB) db_; if (ownerbean == null) return new ArrayList(); LinkType type = typemap.get(ownerbean.getClass()); if (type == null) return new ArrayList(); return adb.getLinks(ownerbean.getKey(), type.toString()); } /** * Import xml. * * @param is * the input stream containing the XML * * @throws Exception * the exception */ @Override public void importXml(InputStream is) throws Exception { JAXBContext jc = JAXBContext.newInstance(XmlContainer.class); Unmarshaller u = jc.createUnmarshaller(); XmlContainer container = (XmlContainer) u.unmarshal(is); if (container.Link == null) return; // use key from import file if importing into empty db int nextkey = db_.nextkey(); boolean use_keys = nextkey == 1; for (Link link : container.Link) { if (!use_keys) link.setKey(nextkey++); db_.addObj(link); } refresh(); } /** * Move links from one object to another * * @param oldOwner * the old owner * @param newOwner * the new owner * * @throws Exception * the exception */ public void moveLinks(KeyedEntity oldOwner, KeyedEntity newOwner) throws Exception { Collection atts = getLinks(oldOwner); Iterator it = atts.iterator(); while (it.hasNext()) { Link at = it.next(); at.setOwnerKey(Integer.valueOf(newOwner.getKey())); LinkType type = typemap.get(newOwner.getClass()); if (type == null) throw new Exception("illegal link owner type"); at.setOwnerType(type.toString()); db_.updateObj(at); } } /** * return a new link object * * @return the link */ public Link newLink() { return (db_.newObj()); } /** * Instantiates a new link model. */ private LinkModel() { db_ = DBHelper.getFactory().createLinkDB(); } /** * Refresh listeners */ public void refresh() { refreshListeners(); } /** * Save a link. * * @param link * the link * * @throws Exception * the exception */ public void saveLink(Link link) throws Exception { int num = link.getKey(); if (num == -1) { int newkey = db_.nextkey(); link.setKey(newkey); db_.addObj(link); } else { db_.updateObj(link); } // inform views of data change refresh(); } @Override public String getExportName() { return "LINKS"; } @Override public String getInfo() throws Exception { return Resource.getResourceString("links") + ": " + getLinks().size(); } } ================================================ FILE: BORGCalendar/model/src/main/java/net/sf/borg/model/MemoModel.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2003-2010 by Mike Berger */ package net.sf.borg.model; import jakarta.xml.bind.JAXBContext; import jakarta.xml.bind.Marshaller; import jakarta.xml.bind.Unmarshaller; import jakarta.xml.bind.annotation.XmlRootElement; import net.sf.borg.common.Errmsg; import net.sf.borg.common.Resource; import net.sf.borg.model.db.DBHelper; import net.sf.borg.model.db.MemoDB; import net.sf.borg.model.entity.Memo; import net.sf.borg.model.undo.MemoUndoItem; import net.sf.borg.model.undo.UndoLog; import java.io.InputStream; import java.io.Writer; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.Iterator; /** * The Memo Model manages the Memo Entities. Memos are keyed by a name. Memos contain simple text and * have stayed simple to be able to sync with the simple memo functionality of a Palm Pilot. */ public class MemoModel extends Model implements Searchable { /** The normalized date format for timestamps in a memo */ private final SimpleDateFormat normalDateFormat_ = new SimpleDateFormat( "MM/dd/yyyy hh:mm aa"); /** * class XmlContainer is solely for JAXB XML export/import * to keep the same XML structure as before JAXB was used */ @XmlRootElement(name="MEMOS") private static class XmlContainer { public Collection Memo; } /** The db */ private final MemoDB db_; // the database /** The singleton */ static private final MemoModel self_ = new MemoModel(); /** * Gets the singleton. * * @return the singleton */ public static MemoModel getReference() { return (self_); } /** * Gets the dB. * * @return the dB */ public MemoDB getDB() { return db_; } /** * Gets all memos. * * @return all memos * * @throws Exception the exception */ public Collection getMemos() throws Exception { Collection memos = db_.readAll(); Iterator it = memos.iterator(); while (it.hasNext()) { Memo memo = it.next(); parseOutDates(memo); } return memos; } /** * Gets all memo names. * * @return the memo names * * @throws Exception the exception */ public Collection getNames() throws Exception { return db_.getNames(); } /** * Instantiates a new memo model. */ private MemoModel() { db_ = DBHelper.getFactory().createMemoDB(); } /** * Delete a memo by name * * @param name the memo name * @param undo true if we are executing an undo */ public void delete(String name, boolean undo) { try { Memo m = getMemo(name); LinkModel.getReference().deleteLinksToEntity(m); if (m == null) return; Memo orig = m.copy(); db_.delete(m.getMemoName()); if (!undo) { UndoLog.getReference().addItem(MemoUndoItem.recordDelete(orig)); } } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } refresh(); } /** * Save a memo. * * @param memo the memo */ public void saveMemo(Memo memo) { saveMemo(memo, false); } /** * Save a memo. * * @param memo the memo * @param undo true if we are executing an undo */ public void saveMemo(Memo memo, boolean undo) { try { // determine create an update dates Date now = new Date(); if (memo.getCreated() == null) memo.setCreated(now); memo.setUpdated(now); // add the timestamp string to the text addDateString(memo); String name = memo.getMemoName(); Memo old = db_.readMemo(name); if (old == null) { db_.addMemo(memo); if (!undo) { UndoLog.getReference() .addItem(MemoUndoItem.recordAdd(memo)); } } else { db_.updateMemo(memo); if (!undo) { UndoLog.getReference().addItem( MemoUndoItem.recordUpdate(old)); } } } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } // inform views of data change refresh(); } /** * Adds the timestamp string to a memo. This is just a string to hold creation and * last update dates. the borg ui shows these dates. The palm pilot knows nothing about them. * On the palm, they appear as extra memo text - and there is nowhere else to keep them * * @param m the memo */ private void addDateString(Memo m) { if (m.getCreated() == null || m.getUpdated() == null) return; if (m.getMemoText() == null) m.setMemoText(""); // if memo already has memo text - remove it String text = m.getMemoText(); if (text.startsWith("TS;")) { int idx1 = 2; int idx2 = text.indexOf(';', idx1 + 1); int idx3 = text.indexOf(';', idx2 + 1); if (idx2 != -1 && idx3 != -1) { m.setMemoText(text.substring(idx3 + 1)); } } m.setMemoText("TS;" + normalDateFormat_.format(m.getCreated()) + ";" + normalDateFormat_.format(m.getUpdated()) + ";" + m.getMemoText()); } /** * Parses the timestamps. * * @param m the memp */ private void parseOutDates(Memo m) { // separate timestamps if needed TS:created;updated; String text = m.getMemoText(); if (text == null) return; if (text.startsWith("TS;")) { int idx1 = 2; int idx2 = text.indexOf(';', idx1 + 1); int idx3 = text.indexOf(';', idx2 + 1); if (idx2 != -1 && idx3 != -1) { try { Date create = normalDateFormat_.parse(text.substring( idx1 + 1, idx2)); Date update = normalDateFormat_.parse(text.substring( idx2 + 1, idx3)); if (create != null) m.setCreated(create); if (update != null) m.setUpdated(update); m.setMemoText(text.substring(idx3 + 1)); } catch (Exception e) { // empty } } } } /** * Gets a memo by name. * * @param name the memo name * * @return the memo * * @throws Exception the exception */ public Memo getMemo(String name) throws Exception { Memo m = db_.readMemo(name); if (m == null) return null; parseOutDates(m); return m; } /** * Export to XML * * @param fw the writer to write XML to * * @throws Exception the exception */ @Override public void export(Writer fw) throws Exception { JAXBContext jc = JAXBContext.newInstance(XmlContainer.class); Marshaller m = jc.createMarshaller(); XmlContainer container = new XmlContainer(); container.Memo = getMemos(); m.marshal(container, fw); } /** * Import xml. * * @param is the input stream containing the XML * * @throws Exception the exception */ @Override public void importXml(InputStream is) throws Exception { JAXBContext jc = JAXBContext.newInstance(XmlContainer.class); Unmarshaller u = jc.createUnmarshaller(); XmlContainer container = (XmlContainer)u.unmarshal( is ); if( container.Memo == null ) return; for (Memo memo : container.Memo ) { saveMemo(memo, true); } refresh(); } /** * Refresh listeners */ public void refresh() { refreshListeners(); } /* (non-Javadoc) * @see net.sf.borg.model.Searchable#search(net.sf.borg.model.SearchCriteria) */ @Override public Collection search(SearchCriteria criteria) { Collection res = new ArrayList(); // result collection try { // do not match if a search category is set if (!criteria.getCategory().equals("") && !criteria.getCategory().equals(CategoryModel.UNCATEGORIZED)) return res; Collection memos = getMemos(); for (Memo memo : memos) { // do not search on encrypted memos if( memo.isEncrypted() ) continue; String tx = memo.getMemoName() + " " + memo.getMemoText(); if( !criteria.search(tx)) continue; // add the appt to the search results res.add(memo); } } catch (Exception e) { Errmsg.getErrorHandler().errmsg(e); } return (res); } @Override public String getExportName() { return "MEMOS"; } @Override public String getInfo() throws Exception { return Resource.getResourceString("Memos") + ": " + getMemos().size(); } } ================================================ FILE: BORGCalendar/model/src/main/java/net/sf/borg/model/Model.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2003 by Mike Berger */ /* * Model.java * * Created on May 23, 2003, 11:33 AM */ package net.sf.borg.model; import lombok.Data; import net.sf.borg.model.Model.ChangeEvent.ChangeAction; import java.io.InputStream; import java.io.Writer; import java.util.ArrayList; import java.util.HashSet; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; /** * base class for data models. A Model provides access to a data store to the * outside world. Clients of the model can register as Listeners to be provided * with feedback any time the model changes. */ public abstract class Model { static private final Logger log = Logger.getLogger("net.sf.borg"); /** * The Class ChangeEvent. */ @Data public static class ChangeEvent { /** * Enum to hold actions that can happen to an object */ public enum ChangeAction { ADD, CHANGE, DELETE } private ChangeAction action; private final Object object; private Model model; /** * Instantiates a new change event. * * @param object the changed object * @param action the action */ public ChangeEvent(Object object, ChangeAction action) { this.object = object; this.action = action; } } /** * list of all instatiated models */ private static final Set modelList = new HashSet(); /** * get a list of all instantiated models * * @return list of models */ public static Set getExistingModels() { return modelList; } /** * sync all models */ public static void syncModels() { for (Model m : modelList) m.sync(); } /** * sync the model with the underlying DB for DBs that can be changed without * going through Borg (i.e. MySQL) */ protected void sync() { // do nothing by default } /** * Listener for a Model. * */ public interface Listener { /** * Called to notify Listener when the Model is changed. */ void update(ChangeEvent event); } // list of clients to notify when the model changes private final ArrayList listeners; private final ArrayList unBlockableListeners; private boolean notify_listeners = true; /** * Instantiates a new model. */ public Model() { modelList.add(this); listeners = new ArrayList(); unBlockableListeners = new ArrayList(); } /** * Adds a listener. * * @param listener the listener */ public void addListener(Listener listener) { listeners.add(listener); } public void addUnblockableListener(Listener listener) { unBlockableListeners.add(listener); } /** * send an update message to all listeners with no change event */ protected void refreshListeners() { ChangeEvent ev = new ChangeEvent(null, ChangeAction.CHANGE); ev.model = this; refreshListeners(ev); } /** * send an update message to all listeners with a change event. */ protected void refreshListeners(ChangeEvent event) { if (log.isLoggable(Level.FINE)) log.fine("Sending ChangeEvent[" + event.toString()); for (int i = 0; i < unBlockableListeners.size(); i++) { Listener v = unBlockableListeners.get(i); v.update(event); if (log.isLoggable(Level.FINE)) log.fine("...To Listener: " + v); } if( !notify_listeners ) return; event.model = this; for (int i = 0; i < listeners.size(); i++) { Listener v = listeners.get(i); v.update(event); if (log.isLoggable(Level.FINE)) log.fine("...To Listener: " + v); } } /** * Removes the listeners. */ public void remove() { removeListeners(); } /** * Removes a listener. * * @param listener the listener */ public void removeListener(Listener listener) { listeners.remove(listener); unBlockableListeners.remove(listener); } /** * notify all listeners that the model is being destroyed */ protected void removeListeners() { listeners.clear(); unBlockableListeners.clear(); } /** * Export the models data to XML * * @param fw - writer to write the XML to * @throws Exception */ public abstract void export(Writer fw) throws Exception; /** * Import model data from XML * * @param is input stream containing XML * @throws Exception */ public abstract void importXml(InputStream is) throws Exception; /** * get the root XML element name for this model's XML representation * * @return the XML root element name */ public abstract String getExportName(); /** * return user readable information about the model * * @return user readable information String */ public abstract String getInfo() throws Exception; public void setNotifyListeners(boolean b) { notify_listeners = b; } } ================================================ FILE: BORGCalendar/model/src/main/java/net/sf/borg/model/OptionModel.java ================================================ /* This file is part of BORG. BORG 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. BORG 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 BORG; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Copyright 2003-2010 by Mike Berger */ package net.sf.borg.model; import jakarta.xml.bind.JAXBContext; import jakarta.xml.bind.Marshaller; import jakarta.xml.bind.Unmarshaller; import jakarta.xml.bind.annotation.XmlRootElement; import net.sf.borg.common.Resource; import net.sf.borg.model.db.DBHelper; import net.sf.borg.model.db.OptionDB; import net.sf.borg.model.entity.Option; import java.io.InputStream; import java.io.Writer; import java.util.Collection; /** * The Option Model manages the Borg Options */ public class OptionModel extends Model implements Searchable