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.0BORGCalendarBORGCalendar2.0common${maven.build.timestamp}yyyy-MM-dd HH:mmjavax.mailmail1.5.0-b01src/main/resources**/*trueorg.codehaus.mojobuildnumber-maven-plugin1.4initializecreate{0, date, yyyy-MM-dd HH:mm:ss}no-git-foundfalsefalsehttps://github.com/mikeberger/borg_calendar.gitscm: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 extends PrinterJob> 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.0BORGCalendarBORGCalendar2.0installjarmaven-resources-plugin2.6copy-resourcesprocess-resourcescopy-resources${basedir}/target/installersrc/main/resourcestruemaven-antrun-plugin1.7falsedefault-cliprocess-resourcesrun
================================================
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
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:
You must give any other recipients of the Work or Derivative Works a copy of this License; and
You must cause any modified files to carry prominent notices stating that You changed the files; and
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
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.
Manage Cookie Consent
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional
Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
================================================
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
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.
Manage Cookie Consent
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional
Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
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.
Automatically distribute Oracle databases across nodes, regions, and countries to help meet data residency, extreme availability, and performance needs.
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.
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).
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.
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.
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.
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).
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.
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.
Swisscom improves operational efficiency and protects databases with Oracle hardware
Accelerate enterprise applications and databases while reducing IT management workloads with the same database and systems technology as Oracle Cloud 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.
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.
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.
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.
================================================
FILE: BORGCalendar/install/src/main/resources/licenses/eclipse distribution license - v 1.0 - edl-v10.html
================================================
Eclipse Distribution License | The Eclipse FoundationSkip to main content
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.
================================================
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
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.
Manage Cookie Consent
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional
Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
================================================
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
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.
“The Free Software Foundation (FSF) is a nonprofit with a worldwide
mission to promote computer user freedom. We defend the rights of all
software users.”
================================================
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
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.
Manage Cookie Consent
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional
Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
================================================
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
that the initial Contributor has attached the notice described in Exhibit B to the Covered Software; or
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:
any file in Source Code Form that results from an addition to, deletion from, or modification of the contents of Covered Software; or
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:
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
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:
for any code that a Contributor has removed from Covered Software; or
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
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:
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
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
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.
Manage Cookie Consent
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional
Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
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.
Manage Cookie Consent
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional
Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
================================================
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.0BORGCalendarBORGCalendar2.0modelorg.projectlomboklombokBORGCalendarcommonjunitjunittestcom.h2databaseh22.4.240runtimeorg.mnode.ical4jical4j2.2.5org.mnode.ical4jical4j-vcard1.0.1org.codehaus.groovygroovy-alljakarta.xml.bindjakarta.xml.bind-api4.0.4com.sun.xml.bindjaxb-core4.0.6com.sun.xml.bindjaxb-impl4.0.6com.google.api-clientgoogle-api-client2.8.1com.google.oauth-clientgoogle-oauth-client-jetty1.39.0com.google.apisgoogle-api-services-calendarv3-rev20251207-2.0.0com.google.apisgoogle-api-services-tasksv1-rev20251102-2.0.0com.google.apisgoogle-api-services-drivev3-rev20251210-2.0.0org.xerialsqlite-jdbc3.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