initial commit

This commit is contained in:
Bene 2023-07-03 15:55:46 +02:00
commit aeeff3b116
29 changed files with 5573 additions and 0 deletions

38
.gitignore vendored Normal file
View File

@ -0,0 +1,38 @@
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store

7
.idea/encodings.xml Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>

13
.idea/misc.xml Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_19" default="true" project-jdk-name="openjdk-19" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

124
.idea/uiDesigner.xml Normal file
View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

137
.idea/workspace.xml Normal file
View File

@ -0,0 +1,137 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="c4312d8b-8daa-4137-9297-f2507703d1ac" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/encodings.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/uiDesigner.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.mvn/wrapper/maven-wrapper.jar" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.mvn/wrapper/maven-wrapper.properties" afterDir="false" />
<change afterPath="$PROJECT_DIR$/F_CR2.txt" afterDir="false" />
<change afterPath="$PROJECT_DIR$/F_Script_Output.txt" afterDir="false" />
<change afterPath="$PROJECT_DIR$/P_Photos.txt" afterDir="false" />
<change afterPath="$PROJECT_DIR$/mvnw" afterDir="false" />
<change afterPath="$PROJECT_DIR$/mvnw.cmd" afterDir="false" />
<change afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/settings.ini" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/de/emmerts/fotoverwaltung/FileTreeComponent.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/de/emmerts/fotoverwaltung/FileTreeController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/de/emmerts/fotoverwaltung/FileTreeItemComponent.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/de/emmerts/fotoverwaltung/FileTreeItemController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/de/emmerts/fotoverwaltung/FindDiffs.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/de/emmerts/fotoverwaltung/MainApplication.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/de/emmerts/fotoverwaltung/MainController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/module-info.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/de/emmerts/fotoverwaltung/FileTree.fxml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/de/emmerts/fotoverwaltung/FileTreeItem.fxml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/de/emmerts/fotoverwaltung/MainApplication.fxml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/de/emmerts/fotoverwaltung/image.svg" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="FxmlFile" />
<option value="JavaFXApplication" />
<option value="Class" />
</list>
</option>
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
<component name="ProjectId" id="2NhCWfjX3vC8nlMmbHwHyGPhuEK" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true">
<ConfirmationsSetting value="2" id="Add" />
</component>
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;Downloaded.Files.Path.Enabled&quot;: &quot;false&quot;,
&quot;Repository.Attach.Annotations&quot;: &quot;false&quot;,
&quot;Repository.Attach.JavaDocs&quot;: &quot;false&quot;,
&quot;Repository.Attach.Sources&quot;: &quot;false&quot;,
&quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;SHARE_PROJECT_CONFIGURATION_FILES&quot;: &quot;true&quot;,
&quot;last_opened_file_path&quot;: &quot;C:/Users/Bene/IdeaProjects/Fotoverwaltung/src/main/resources/de/emmerts/fotoverwaltung&quot;,
&quot;project.structure.last.edited&quot;: &quot;Libraries&quot;,
&quot;project.structure.proportion&quot;: &quot;0.15&quot;,
&quot;project.structure.side.proportion&quot;: &quot;0.2&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;reference.settings.project.maven.repository.indices&quot;
}
}</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="C:\Users\Bene\IdeaProjects\Fotoverwaltung\src\main\resources\de\emmerts\fotoverwaltung" />
</key>
<key name="MoveFile.RECENT_KEYS">
<recent name="C:\Users\Bene\IdeaProjects\Fotoverwaltung\src\main\resources\de\emmerts\fotoverwaltung" />
<recent name="C:\Users\Bene\IdeaProjects\Fotoverwaltung" />
</key>
<key name="MoveClassesOrPackagesDialog.RECENTS_KEY">
<recent name="de.emmerts.fotoverwaltung" />
</key>
</component>
<component name="RunManager">
<configuration name="Main" type="Application" factoryName="Application">
<option name="MAIN_CLASS_NAME" value="de.emmerts.fotoverwaltung.MainApplication" />
<module name="Fotoverwaltung" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="c4312d8b-8daa-4137-9297-f2507703d1ac" name="Changes" comment="" />
<created>1680106962851</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1680106962851</updated>
</task>
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State />
</value>
</entry>
</map>
</option>
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<breakpoints>
<line-breakpoint enabled="true" type="java-line">
<url>file://$PROJECT_DIR$/src/main/java/de/emmerts/fotoverwaltung/FileTreeComponent.java</url>
<line>22</line>
<option name="timeStamp" value="7" />
</line-breakpoint>
</breakpoints>
</breakpoint-manager>
</component>
<component name="com.intellij.coverage.CoverageDataManagerImpl">
<SUITE FILE_PATH="coverage/Fotoverwaltung$Main.ic" NAME="Main Coverage Results" MODIFIED="1680614443901" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="idea" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" />
</component>
</project>

BIN
.mvn/wrapper/maven-wrapper.jar vendored Normal file

Binary file not shown.

2
.mvn/wrapper/maven-wrapper.properties vendored Normal file
View File

@ -0,0 +1,2 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.5/apache-maven-3.8.5-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar

1355
F_CR2.txt Normal file

File diff suppressed because it is too large Load Diff

833
F_Script_Output.txt Normal file
View File

@ -0,0 +1,833 @@
├───1995-2008
│ ├───1995
│ ├───1996
│ ├───1997
│ ├───1998
│ ├───1999
│ ├───2000
│ ├───2001
│ │ └───Verena
│ ├───2002
│ ├───2003
│ ├───2004
│ ├───2005
│ ├───2006
│ ├───2007
│ └───2008
├───2009
│ ├───2009_01_29 Happy Birthday Canon Eos 450D
│ ├───2009_01_30 RR erstes Treffen
│ ├───2009_01_30 RR Teamstunde
│ ├───2009_02_03 Spaziergang
│ ├───2009_02_05 Frühling
│ ├───2009_02_11 Noch kein Schnee
│ ├───2009_02_12 Schnee
│ ├───2009_02_13 Autobahn
│ ├───2009_02_13 RR Stammtreff
│ ├───2009_02_15 Spaziergang Kanal
│ ├───2009_02_16 Happy birthday
│ ├───2009_02_18 Mama
│ ├───2009_02_20 RR Bowling
│ ├───2009_02_20 RR Teamstunde
│ ├───2009_02_21 Iglubau
│ ├───2009_03_01 Serien
│ ├───2009_03_02 Walter Kölsch
│ ├───2009_03_04 ein paar Makros
│ ├───2009_03_06 Alese
│ ├───2009_03_07 Lange Nacht des Südens
│ ├───2009_03_13 Bibel HDR
│ ├───2009_03_15 Turm der Sinne
│ ├───2009_03_22 Happy Birthday
│ ├───2009_03_26 Klene
│ ├───2009_03_27 Himmel
│ ├───2009_03_27 RR Eisdico
│ ├───2009_03_28 RR Grillen
│ ├───2009_03_29 Zimmer360
│ ├───2009_03_31 Garten
│ ├───2009_04_02 Tiergarten
│ ├───2009_04_03 RR Stammtreff
│ ├───2009_04_10-13 RR Osterfreizeit_09
│ │ ├───2009_04_10
│ │ ├───2009_04_11
│ │ ├───2009_04_12
│ │ └───2009_04_13
│ ├───2009_04_14 Lingenbergs bei uns
│ ├───2009_04_17 Mama serie
│ ├───2009_04_18 Vögel
│ ├───2009_04_19 dennenlohe
│ ├───2009_04_24 RR Stammtreff
│ ├───2009_04_30 Makros
│ ├───2009_05_01 PC
│ ├───2009_05_03 Downhillpark Festung
│ ├───2009_05_08 RR Lobpreisabend
│ ├───2009_05_09 RR Sponsorenlauf
│ ├───2009_05_10 klein
│ ├───2009_05_15 RR Starter
│ │ └───sch
│ ├───2009_05_20 Zecke
│ ├───2009_05_21 Schrank
│ ├───2009_05_23 Helga u Hans-Martin
│ ├───2009_05_30 RR überfall_planung
│ ├───2009_06_01 RR Pfingstecamp_09
│ ├───2009_06_02 Essen
│ ├───2009_06_09 Träger+Makros
│ ├───2009_06_10 Isar_Munchen
│ ├───2009_06_21 Wald
│ ├───2009_06_25 7Zwerge
│ ├───2009_06_26 RR Stammtreff
│ ├───2009_06_27 Regen
│ ├───2009_06_27 RR Bowling II
│ ├───2009_06_30 klein
│ ├───2009_07_02 Welten v
│ ├───2009_07_03
│ ├───2009_07_03 klein
│ ├───2009_07_04 20-Jähriges
│ ├───2009_07_05 Chinarestaurante
│ ├───2009_07_10 RR Wischmop
│ ├───2009_07_15 klein
│ ├───2009_07_16 Sommerkonzert
│ │ └───RAW
│ ├───2009_07_17-2009_07_20 Zahn_OP
│ │ ├───2009_07_17
│ │ ├───2009_07_18
│ │ └───2009_07_20
│ ├───2009_07_21 makros
│ ├───2009_07_22 makros
│ ├───2009_07_24 Sommerfest
│ ├───2009_07_25 klen
│ ├───2009_07_25 Nachtspaziergang
│ ├───2009_07_31 Essen
│ ├───2009_07_31 RR Klettern
│ ├───2009_07_31 RR Wasserschlacht
│ ├───2009_08_01 Bardentrefen
│ ├───2009_08_02 7 SChlafen
│ ├───2009_08_06 LAN A
│ ├───2009_08_07 LAN B
│ ├───2009_08_08 Klassik Open Air
│ ├───2009_08_09 Botanischer Garten Erlangn
│ ├───2009_08_13 Klohaus
│ ├───2009_08_15 Hängematte
│ ├───2009_08_18 Urlaub Ankommen
│ ├───2009_08_19 Urlaub Tatzelwurm
│ ├───2009_08_20 Urlaub Hechtsee
│ ├───2009_08_21 Urlaub Walchsee
│ ├───2009_08_22 Urlaub Alm
│ ├───2009_08_23 Urlaub Pendling
│ ├───2009_08_24 Urlaub Isar
│ ├───2009_09_17 Portrais
│ ├───2009_09_20 Wendelstein
│ ├───2009_09_25 RR Cachen
│ ├───2009_09_26 Schnecke
│ ├───2009_09_27 Makro neu
│ ├───2009_09_28 Makros
│ ├───2009_09_28 Welten verbinden
│ ├───2009_09_30 kjlein
│ ├───2009_10_02 klene
│ ├───2009_10_03 Zweschgen
│ ├───2009_10_04 klene
│ ├───2009_10_07 Wandertag
│ ├───2009_10_23 RR Wischmoppfight
│ ├───2009_10_30 RR Poker
│ ├───2009_11_03 Bunker
│ ├───2009_11_05 Garten
│ ├───2009_11_05 Portrait
│ ├───2009_11_13 Krampfadergeschwader
│ ├───2009_11_14 RR Cachen
│ ├───2009_11_22 AVlight
│ ├───2009_11_27 Planespotting
│ ├───2009_11_27 RR Billiard
│ ├───2009_12_01 Advenet
│ ├───2009_12_02 Mond
│ ├───2009_12_03 klene
│ ├───2009_12_18 RR Weihnachtsfeier
│ ├───2009_12_18 Winterball
│ └───2009_12_24 weihnachten
├───2014
│ ├───2014-01-01 RIDE
│ ├───2014-01-02 RIDE
│ ├───2014-01-17 Teamstunde
│ ├───2014-01-21 sBaggers
│ ├───2014-01-24 Siedlung
│ ├───2014-01-27 Schnee
│ ├───2014-01-30 Winterkonzert
│ │ └───1920
│ ├───2014-01-31 Teamstunde Steppenzebras
│ │ └───1920
│ ├───2014-02-01 Eiche Ranch
│ ├───2014-02-08 Distriktversammlung
│ ├───2014-02-15 Glühkerzen
│ ├───2014-02-16 BD
│ ├───2014-02-18 Philip Scheulen
│ ├───2014-02-21 Teambesuch Erlangen
│ ├───2014-02-24 Helikopter
│ ├───2014-02-26 Michael
│ ├───2014-03-01 Die Lange Nacht des Südens
│ ├───2014-03-08 Emden
│ ├───2014-04-15 Leiterfreizeit
│ ├───2014-04-23 Lingenbergs Fränkischre
│ ├───2014-04-26 Ranch Geparden
│ ├───2014-04-29 Website Bilder
│ ├───2014-04-30 WG-Party
│ ├───2014-05-03 Stammaktion
│ ├───2014-05-14 Jojo
│ ├───2014-05-17 Party
│ ├───2014-05-25 JLTC C Ittlingen
│ │ ├───Auswahl
│ │ │ ├───Tag1
│ │ │ │ └───1920
│ │ │ ├───Tag2
│ │ │ │ └───1920
│ │ │ ├───Tag3
│ │ │ │ └───1920
│ │ │ └───Tag4
│ │ │ └───1920
│ │ ├───bilder
│ │ │ ├───bene
│ │ │ ├───cäro
│ │ │ ├───jürgen
│ │ │ └───soren
│ │ ├───Ende 1920
│ │ ├───Extras
│ │ └───goprofiles
│ │ ├───gopro abbau
│ │ │ └───1024
│ │ ├───gopro anfahrt
│ │ │ ├───klein
│ │ │ └───klein2
│ │ └───gopro aufbau
│ │ └───klein
│ ├───2014-06-02
│ ├───2014-06-06 Trainingscamp
│ ├───2014-06-18 Portraits
│ ├───2014-06-27 ABI MW
│ │ ├───3720
│ │ ├───450D
│ │ ├───60D I
│ │ ├───60D II
│ │ └───org
│ ├───2014-06-28 ABI PGN
│ │ ├───2 franzi
│ │ ├───450D
│ │ ├───60D
│ │ ├───ABI-PGN14
│ │ ├───franzi
│ │ │ └───anderes zeug
│ │ └───time
│ ├───2014-07-11 Stammtreff
│ ├───2014-07-20 Taufe
│ ├───2014-07-21 Abschleppen
│ ├───2014-07-26 Nähen
│ ├───2014-07-27 Joschka Geburtstag
│ ├───2014-07-31 Bundescamp
│ │ └───Auswahl
│ ├───2014-08-30 Bundescamp Eva
│ │ └───1920
│ ├───2014-09-05
│ ├───2014-09-10 NTT Rügen
│ ├───2014-09-28 Verabschiedung FCGN
│ ├───2014-10 Klassenbilder
│ │ ├───05a
│ │ ├───05b
│ │ ├───05cg
│ │ ├───05dg
│ │ ├───06a
│ │ ├───06b
│ │ ├───06c
│ │ ├───06dg
│ │ ├───06eg
│ │ ├───07a
│ │ ├───07b
│ │ ├───07c
│ │ ├───07dg
│ │ ├───08a
│ │ ├───08b
│ │ ├───08c
│ │ ├───08d
│ │ ├───08e
│ │ ├───08f
│ │ ├───09a
│ │ ├───09b
│ │ ├───09c
│ │ ├───09d
│ │ ├───09e
│ │ ├───10a
│ │ ├───10b
│ │ ├───10c
│ │ ├───Q11
│ │ └───Q12
│ ├───2014-10-13 Sonnenuntergang
│ ├───2014-11-15 Ranch
│ ├───2014-11-27 Michael
│ ├───2014-12-08 Feuer
│ ├───2014-12-12 Team Abschluss Essen
│ │ └───gif
│ ├───2014-12-19 Weihnachtsfeier
│ ├───2014-12-24 Weihnachten
│ ├───2014-12-28 Geburtstag Iris
│ └───2014-12-31 WG Party
├───2015
│ ├───2015-01-03 Ranch
│ │ └───pano0
│ ├───2015-01-03 Renovierung
│ ├───2015-01-18 JLVT
│ ├───2015-02-05 Grundriss Pläne
│ ├───2015-02-06 Teambesuch
│ ├───2015-02-07 Leiteressen
│ ├───2015-02-08 Druckerzubehör
│ ├───2015-02-09 Vögel
│ ├───2015-02-16 Mallorca
│ ├───2015-02-21 Renovierung
│ ├───2015-02-27 Teamstunde First Aid
│ ├───2015-03-08 Geburtstag Jason
│ ├───2015-03-14 Deutsches Museum
│ ├───2015-03-20 Sonnenfinsternis
│ ├───2015-04-02 Osterfreizeit
│ │ ├───2015-04-02
│ │ ├───2015-04-03
│ │ ├───2015-04-04
│ │ ├───2015-04-05
│ │ ├───2015-04-06
│ │ ├───450d
│ │ ├───Auswahl
│ │ └───gopro
│ │ ├───Tag1
│ │ └───Tag2
│ ├───2015-04-07 Spalt Dachboden
│ ├───2015-04-22 Lehrerfoto
│ ├───2015-04-24 Lilienhajk
│ ├───2015-05-06 Wetter
│ ├───2015-05-08 Teamstunde Feuer
│ ├───2015-05-10 Muttertag
│ ├───2015-05-15 Teamstunde Kohte
│ ├───2015-05-22 Pfadrangeraktion
│ ├───2015-05-23 Ranch
│ │ ├───2015-05-23 Rannch
│ │ ├───2015-05-24 Ranch
│ │ └───2015-05-25 Ranch
│ ├───2015-05-30 Hochzeit
│ ├───2015-06-10 Passbilder
│ ├───2015-06-26 Palm Beach
│ ├───2015-06-30 Falter
│ ├───2015-07-03 Grillen Geparden
│ ├───2015-07-04 BD
│ ├───2015-07-07 Gewitter
│ ├───2015-07-27 Joschkas Geburtstag
│ ├───2015-07-31 Wasserschlacht
│ │ ├───Auswahl
│ │ │ └───1024
│ │ └───gif
│ │ └───1
│ ├───2015-08-01 Hajk
│ │ ├───2015-08-01
│ │ ├───2015-08-02
│ │ ├───2015-08-03
│ │ ├───2015-08-04
│ │ ├───2015-08-05
│ │ ├───2015-08-06
│ │ ├───not safe for work
│ │ ├───Pano
│ │ │ ├───1
│ │ │ ├───1 (Kopie)
│ │ │ ├───10
│ │ │ ├───11
│ │ │ ├───12
│ │ │ ├───13
│ │ │ ├───14
│ │ │ ├───15
│ │ │ ├───2
│ │ │ ├───3
│ │ │ ├───4
│ │ │ ├───5
│ │ │ ├───6
│ │ │ ├───7
│ │ │ ├───8
│ │ │ └───9
│ │ └───safe for work
│ │ ├───2015-08-01
│ │ ├───2015-08-02
│ │ ├───2015-08-03
│ │ ├───2015-08-04
│ │ ├───2015-08-05
│ │ └───2015-08-06
│ ├───2015-08-12 Bad Renovierung
│ ├───2015-08-21 Pfadrangercamp
│ │ ├───2015-08-21
│ │ ├───2015-08-23
│ │ ├───2015-08-24
│ │ ├───2015-08-27
│ │ ├───2015-08-28
│ │ └───prcmap
│ │ └───1024
│ ├───2015-08-29 Igel
│ ├───2015-09-14 Schwarzer Mann
│ ├───2015-09-19 Leiterspasstermin
│ ├───2015-09-25 Geburtstag Jakob
│ ├───2015-09-28 Zelt
│ │ └───1920
│ ├───2015-10-05 Nestle
│ ├───2015-10-10 Ranch
│ ├───2015-10-15 Anzug
│ ├───2015-10-22 Logistiktreff
│ ├───2015-10-31 Bad Renovierung
│ ├───2015-11-07 Zimmer Elektrik
│ ├───2015-11-08 Joschka
│ │ └───1920
│ ├───2015-11-10 Nestle
│ ├───2015-11-20 Bad Renovierung
│ ├───2015-11-22 Taufe Line
│ ├───2015-11-26 Fleisch
│ ├───2015-11-28 Ranch
│ ├───2015-11-29 Segnung Katharina
│ ├───2015-12-05 Team Abschlussessen
│ ├───2015-12-13 Nate
│ ├───2015-12-18 Weihnachtsfeier
│ ├───2015-12-26 Walchensee
│ └───2015-12-31 Silvester
├───2016
│ ├───2016-01-10 Carina
│ ├───2016-01-15 Firmenfeier
│ │ └───Auswahl
│ ├───2016-01-23 Carina
│ ├───2016-01-27 Elas Geburtstag
│ ├───2016-02-01 Klassenfotos
│ │ ├───05a
│ │ │ └───alt
│ │ ├───05b
│ │ ├───05c
│ │ ├───05d
│ │ ├───06a
│ │ ├───06b
│ │ ├───06c
│ │ ├───06d
│ │ ├───07a
│ │ ├───07b
│ │ ├───07c
│ │ ├───07d
│ │ ├───07e
│ │ ├───08a
│ │ ├───08b
│ │ ├───08c
│ │ ├───08d
│ │ ├───09a
│ │ ├───09b
│ │ ├───09c
│ │ ├───09d
│ │ ├───09e
│ │ ├───09f
│ │ ├───10a
│ │ ├───10b
│ │ ├───10c
│ │ ├───10d
│ │ ├───10e
│ │ ├───Auswahl
│ │ ├───Auswahl unbearbeitet
│ │ │ └───xcf
│ │ ├───Auswahl unbearbeitet (Kopie)
│ │ ├───JPG
│ │ │ └───Ende
│ │ │ └───klein
│ │ └───Q12
│ ├───2016-02-08 Bad
│ ├───2016-02-09 Reißverschluss
│ ├───2016-02-11 Alpen
│ │ ├───IMG_7779
│ │ ├───IMG_7800
│ │ ├───IMG_7840
│ │ ├───IMG_7852
│ │ ├───IMG_7881
│ │ └───IMG_7905
│ ├───2016-02-17 Bad
│ ├───2016-02-25 Lines Geburtstag
│ ├───2016-02-26 Lines Geburtstag
│ ├───2016-02-29 Bad
│ ├───2016-03-04 Stammtreff
│ ├───2016-03-06 wURM
│ ├───2016-03-11 Stammtreff
│ ├───2016-03-12 Party
│ ├───2016-03-14 Johie
│ ├───2016-03-18 Schweiz
│ │ ├───2016-03-18
│ │ ├───2016-03-19
│ │ │ ├───pano1
│ │ │ ├───pano2
│ │ │ ├───pano3
│ │ │ └───pano4
│ │ └───2016-03-20
│ ├───2016-04-02 LAN Party
│ ├───2016-04-15 Stammtreff
│ ├───2016-04-16 Joschka Schule
│ │ └───mp4
│ │ └───P-Seminar1
│ │ └───Bilder
│ ├───2016-04-24 Gebutstag Carina
│ ├───2016-05-01 Oma Gagsteiger
│ ├───2016-05-04 Brüder
│ ├───2016-05-14 Pfingstcamp
│ │ ├───1024
│ │ ├───1024 80
│ │ ├───2016-05-14
│ │ ├───2016-05-15
│ │ ├───2016-05-16
│ │ ├───2016-05-17
│ │ ├───2016-05-19
│ │ └───2016-05-20
│ ├───2016-05-21 Renovierung
│ ├───2016-06-03 Letzte Teamstunde
│ ├───2016-06-03 SylviePeterArtiBene
│ ├───2016-06-05 Veris Geburstagsfeier
│ ├───2016-06-11 Hundshaupten
│ ├───2016-06-17 RR-Unterwäsche
│ │ └───Auswahl
│ ├───2016-06-25 Klettern
│ ├───2016-07-08 Team
│ ├───2016-07-22 Wasserschlacht
│ │ ├───rutschen
│ │ └───rutschen1920
│ │ └───IMG_7566
│ ├───2016-07-23 Ranch
│ │ └───1920
│ ├───2016-07-27 Geburtstag Joschka
│ ├───2016-07-31 Eurocamp Bene
│ │ ├───2016-07-31
│ │ ├───2016-08-02
│ │ ├───2016-08-03
│ │ ├───2016-08-04
│ │ │ ├───pano0
│ │ │ └───pano1
│ │ ├───2016-08-05
│ │ └───2016-08-06 Rückfahrt
│ ├───2016-07-31 Eurocamp Together
│ ├───2016-08-15 Urlaub
│ │ ├───2016-08-15
│ │ │ └───pano0
│ │ │ └───schlächt
│ │ ├───2016-08-16
│ │ │ └───pano1
│ │ ├───2016-08-17
│ │ │ └───pano2
│ │ │ └───anders
│ │ ├───2016-08-18
│ │ │ └───pano3
│ │ └───2016-08-19
│ │ ├───pano4
│ │ └───pano5
│ ├───2016-08-31 Urlaub
│ │ ├───2016-08-31
│ │ ├───2016-09-01
│ │ ├───2016-09-02
│ │ └───2016-09-03
│ ├───2016-09-06 Noah
│ ├───2016-09-09 Schach
│ ├───2016-09-10 WG
│ ├───2016-09-15 Wasserfleck
│ │ ├───2016-09-09
│ │ ├───2016-09-15
│ │ ├───2016-09-16
│ │ ├───2016-09-18
│ │ ├───2016-09-19
│ │ ├───2016-09-20
│ │ ├───2016-09-21
│ │ ├───2016-09-22
│ │ ├───2016-09-23
│ │ └───Wasserfleck
│ ├───2016-09-24 Lasertag
│ ├───2016-09-25 Jakobs Geburtstag
│ ├───2016-09-27 Passbild
│ ├───2016-10-01 Billiard
│ ├───2016-10-09 Kunst
│ ├───2016-10-12 KlassenbilderHS
│ │ ├───05a beide
│ │ ├───05b
│ │ ├───05c
│ │ ├───05d
│ │ ├───05e
│ │ ├───06a
│ │ ├───06b
│ │ ├───06c
│ │ ├───06d
│ │ ├───07a
│ │ ├───07b
│ │ ├───07d
│ │ ├───08a
│ │ ├───08b
│ │ ├───08c
│ │ ├───08d
│ │ ├───08e
│ │ ├───09a
│ │ ├───09b
│ │ ├───09c
│ │ ├───09d
│ │ ├───09e
│ │ ├───10a
│ │ ├───10b
│ │ ├───10c
│ │ ├───10d
│ │ ├───10e
│ │ ├───Q11
│ │ │ ├───Gesamt
│ │ │ ├───Q11D1
│ │ │ ├───Q11D2
│ │ │ ├───Q11D3
│ │ │ ├───Q11D4
│ │ │ ├───Q11D5
│ │ │ └───Q11D6
│ │ ├───Q12
│ │ │ ├───Q12D1
│ │ │ ├───Q12D2
│ │ │ ├───Q12D3
│ │ │ ├───Q12D4
│ │ │ └───Q12D5
│ │ ├───Sammlung
│ │ │ └───cleaned
│ │ │ └───original dimensions
│ │ └───Verwaltung
│ ├───2016-11-23 Body
│ │ └───auswahl
│ ├───2016-11-26 Palm Beach
│ ├───2016-12-10 Schule Joschka
│ │ ├───cr2
│ │ ├───mov
│ │ └───P-Seminar2
│ │ ├───jpg
│ │ └───mp4
│ ├───2016-12-16 Weihnachtsfeier
│ ├───2016-12-29
│ ├───2016-12-29 VW Werkzeug
│ ├───2016-12-30
│ └───2016-12-31
├───2017
│ ├───2017-01-02 Verlobung
│ ├───2017-01-14 Sonnenhof
│ ├───2017-01-16 Verlobungskarten
│ ├───2017-01-23 Joschka
│ ├───2017-02-02 Papa Haut
│ ├───2017-02-09 Frühstück
│ ├───2017-02-16 Geburtstag
│ ├───2017-02-20 Lehrerfoto
│ ├───2017-03-03 Standesamt Jason Carina
│ │ └───Auswahl
│ ├───2017-03-08
│ ├───2017-03-10
│ ├───2017-03-11 Hochzeit Jason Carina
│ │ ├───Corinna
│ │ ├───CR2
│ │ ├───jpg
│ │ │ ├───60d t
│ │ │ └───timestamp
│ │ ├───Marin
│ │ └───Photobooth
│ ├───2017-03-12 Photobooth
│ ├───2017-03-16 Jahrestag
│ ├───2017-03-17 Starter
│ ├───2017-04-26 Passbild Veri
│ ├───2017-04-28 Bouldern
│ ├───2017-05-20 Ranch
│ ├───2017-05-25 NKK
│ ├───2017-06-04 Pfingstcamp
│ ├───2017-06-08 Pfingstcamp
│ ├───2017-06-09 Pfingstcamp
│ ├───2017-06-10 Pfingstcamp Martin
│ ├───2017-06-15 See
│ ├───2017-07-09 Sonnenhof
│ ├───2017-08-04 Standesamt
│ │ ├───Gruppenfotos
│ │ └───Reportage
│ ├───2017-08-10 Passbild Veri
│ ├───2017-08-13 Hochzeit
│ │ ├───Geschenke
│ │ ├───Gruppenfotos
│ │ ├───Jakob
│ │ ├───Paarshooting
│ │ ├───Paarshooting (Original)
│ │ │ └───darktable_exported
│ │ ├───Ramon
│ │ ├───Reportage
│ │ └───WEDPICS
│ ├───2017-08-14 Flitterwochen Salzburg
│ ├───2017-08-15 Flitterwochen Wanderung
│ ├───2017-08-16 Flitterwochen Sterne
│ ├───2017-08-17 Flitterwochen Wanderung
│ ├───2017-08-18 Flitterwochen See & Burg
│ ├───2017-08-19 Flitterwochen Bra
│ ├───2017-08-20 Flitterwochen Haus
│ ├───2017-09-10 Leiterfreizeit
│ ├───2017-09-16 Dankesfest Kassel
│ ├───2017-10-02 Walchensee mit Johie
│ ├───2017-10-06 Starter
│ ├───2017-10-31 All Hallows Eve
│ ├───2017-10-31 Operation
│ ├───2017-11-14 Städtler Logistik Treff
│ ├───2017-11-17 Bytefest
│ ├───2017-11-24 Lan Party
│ ├───2017-12-01 Stammaktion
│ ├───2017-12-15 Weihnachtsfeier
│ ├───2017-12-22 Geburtstag Micha Jojo
│ ├───2017-12-24 Weihnachten
│ ├───2017-12-25 Weihnachten Emmerts
│ ├───2017-12-26 Oma Gagsteiger
│ ├───2017-12-29 Bowlen ArtiSilviPeti
│ └───2017-12-31 Silvester
├───2018
│ ├───2018-01-06 Eslarn
│ ├───2018-01-07 Quatsch
│ ├───2018-01-21 Geburtstag Mudda
│ ├───2018-01-23 Erding Straubing
│ ├───2018-01-27 Elas Geburtstag
│ ├───2018-02-16 Snowball
│ ├───2018-02-18 Geburtstag
│ ├───2018-02-25 Nachwuchsgottesdienst
│ ├───2018-02-28 Tiergarten
│ ├───2018-03-03 JGA Martin
│ │ └───Video
│ ├───2018-03-06 Auto Reparieren
│ ├───2018-03-06 Wohntage
│ ├───2018-03-07 Geburtstag Jason
│ ├───2018-03-12 Bowling
│ ├───2018-03-19 Regionalleitung
│ ├───2018-03-24 Hochzeit Martin & Simone
│ │ └───Analog
│ │ └───Auswahl
│ ├───2018-03-30 Walchensee
│ ├───2018-04-13 Hackschnitzl
│ ├───2018-04-15 Reiten
│ ├───2018-04-24 Geburtstag Carina
│ ├───2018-05-02 Schuttberg
│ ├───2018-05-04 Stammtreff
│ ├───2018-05-05 Blaue Nacht
│ ├───2018-05-13 Hochzeit Katrin und Manuel
│ ├───2018-05-18 Pfingstcamp
│ │ └───Pfingstcamp 18
│ ├───2018-05-18 Pfingstcamp (Kopie)
│ │ ├───0-700
│ │ ├───1920
│ │ ├───Original
│ │ └───Pfingstcamp 18
│ │ ├───2018-05-18
│ │ ├───2018-05-19
│ │ ├───2018-05-20
│ │ ├───2018-05-21
│ │ ├───2018-05-22
│ │ ├───2018-05-23
│ │ └───2018-05-24
│ ├───2018-05-26 Freilandterarium
│ ├───2018-05-31 Hundshaupten
│ ├───2018-06-09 Mama
│ ├───2018-06-23 Tiergarten
│ ├───2018-06-30 Hochzeit Marco & Verena
│ ├───2018-07-11 Bandessen
│ ├───2018-07-12 Geburtstag Boas
│ ├───2018-07-15 Ranch Leiter
│ ├───2018-07-22 Ranch Team
│ ├───2018-07-27 Wasserschlacht
│ ├───2018-08-04 PR-Camp
│ │ ├───A-Cappella
│ │ └───Melissa
│ ├───2018-08-12 Urlaub Praha
│ ├───2018-08-17 Rumänien
│ │ └───klein
│ ├───2018-09-02 Ulm
│ ├───2018-09-15 Disc-Golf
│ ├───2018-09-16 Familliengottesdienst
│ ├───2018-09-28 Veri
│ ├───2018-10-13 Regiotreff
│ ├───2018-10-31 All Hallows Eve
│ ├───2018-11-06 Städtler Logistik Treff
│ ├───2018-11-12 Muffins
│ ├───2018-11-25 Schwarzach
│ ├───2018-12-07 Spieleabend
│ ├───2018-12-14 Weihnachtsfeier Ranch
│ ├───2018-12-24 Weihnachten
│ ├───2018-12-26 Weihnachten Oma Gagsteiger
│ ├───2018-12-27 Weihnachten Oma Emmert
│ ├───2018-12-28 Urlaub Mittenwald
│ └───2018-12-31 Silvester
├───2019
│ ├───2019-01-06 Familien Gottesdienst
│ ├───2019-01-09 Hilux
│ ├───2019-01-12 Leiteressen
│ ├───2019-01-19 Timos Geburtstag
│ ├───2019-01-25 Stammtreff
│ ├───2019-01-26 60 Jahr Mutter
│ ├───2019-03-08 Studioblitz
│ ├───2019-03-10 Hochzeit Jürgen Agata
│ ├───2019-03-11 Timos Geburtstagsfeier
│ ├───2019-03-24 RR Godi
│ ├───2019-03-29 Probehajk
│ ├───2019-04-05 Teamstunde Jugend
│ ├───2019-04-07 Internationales Essen
│ ├───2019-04-14 Jugendsegnung
│ ├───2019-04-16 Bundeshajk
│ ├───2019-05-11 Absolventenfeier
│ │ └───WT19
│ ├───2019-05-12 Familiengottesdienst
│ ├───2019-05-12 Oma und Opa
│ ├───2019-05-18 Stammaktion
│ │ └───1920
│ ├───2019-05-19 Regen und Sonne
│ ├───2019-05-21 Worriors Luck
│ ├───2019-05-25 Hochzeit Benni Corinna
│ │ ├───4 Trauung
│ │ │ └───4 Trauung
│ │ └───5 Feier
│ │ └───5 Feier
│ ├───2019-05-29 Veris Geburtstag
│ ├───2019-06-07 Pfingstcamp
│ │ ├───Martin
│ │ └───together
│ ├───2019-07-16 Bad Mergentheim
│ ├───2019-07-26 Wasserschlacht
│ │ └───1920
│ ├───2019-07-31 Hochzeitsvideo
│ ├───2019-08-12 Urlaub
│ ├───2019-08-18 Gemeindefreizeit
│ ├───2019-08-24 Hochzeit Hannah und Nate
│ ├───2019-09-21 RR Jubiläum
│ │ └───1920
│ ├───2019-10-13 Regiotreff
│ ├───2019-10-27 Oma und Sonst
│ ├───2019-11-01 Leiterfreizeit
│ │ └───1920
│ ├───2019-11-05 Logistik Treff
│ ├───2019-12-13 Weihnachtsfeier
│ ├───2019-12-22 Flic Flac
│ ├───2019-12-24 Weihnachten
│ ├───2019-12-27 Oma Geburtstag
│ └───2019-12-31 Silvester
├───2020
│ ├───2020-
│ ├───2020-01-10 Stammtreff Starter
│ ├───2020-01-12 Segnung Flo
│ ├───2020-01-17 Firmenfeier Tiergarten
│ ├───2020-01-24 Stammtreff
│ ├───2020-02-08 Audi Bäume
│ ├───2020-02-16 Johie und ich
│ ├───2020-02-27 Winter
│ ├───2020-02-29 Hochzeit Steffi Sören
│ ├───2020-04-12 Garten
│ ├───2020-05-07 Bewerbungsbilder
│ ├───2020-05-29 Fichtelgebirge
│ ├───2020-08-15 Hochzeit Ruben und Lisa
│ ├───2020-08-22 Urlaub
│ │ ├───23
│ │ ├───24
│ │ ├───25
│ │ ├───26
│ │ ├───27
│ │ ├───28
│ │ │ └───Sonnenuntergang
│ │ ├───29
│ │ │ └───Sonnenuntergang
│ │ ├───30
│ │ └───Sonnenuntergang
│ ├───2020-09-04 Leiterfreizeit
│ ├───2020-09-13 Gottesdienst
│ ├───2020-09-20 Potraits
│ ├───2020-09-25 Serengeti-Park
│ │ └───Serengeti2020
│ ├───2020-10-02 Stammtreff
│ ├───2020-10-09 RR Theater
│ ├───2020-10-10 Sponsorenlauf
│ ├───2020-11-28 Walchensee
│ └───2020-12-24 Weihnachten
└───2021
└───2021-02-12 Schneebilder

37
Fotoverwaltung.iml Normal file
View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_19">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/target/generated-sources/annotations" isTestSource="false" generated="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-controls:19.0.2.1" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-controls:win:19.0.2.1" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-graphics:19.0.2.1" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-graphics:win:19.0.2.1" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-base:19.0.2.1" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-base:win:19.0.2.1" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-fxml:19.0.2.1" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-fxml:win:19.0.2.1" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-swing:19.0.2.1" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-swing:win:19.0.2.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.9.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.9.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.9.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.9.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-configuration2:2.8.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.12.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-text:1.9" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
<orderEntry type="library" name="Maven: com.drewnoakes:metadata-extractor:2.18.0" level="project" />
<orderEntry type="library" name="Maven: com.adobe.xmp:xmpcore:6.1.11" level="project" />
</component>
</module>

1602
P_Photos.txt Normal file

File diff suppressed because it is too large Load Diff

316
mvnw vendored Normal file
View File

@ -0,0 +1,316 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://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.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# M2_HOME - location of maven2's installed home dir
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -f /usr/local/etc/mavenrc ] ; then
. /usr/local/etc/mavenrc
fi
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z "$JAVA_HOME" ]; then
if [ -x "/usr/libexec/java_home" ]; then
export JAVA_HOME="`/usr/libexec/java_home`"
else
export JAVA_HOME="/Library/Java/Home"
fi
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=`java-config --jre-home`
fi
fi
if [ -z "$M2_HOME" ] ; then
## resolve links - $0 may be a link to maven's home
PRG="$0"
# need this for relative symlinks
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG="`dirname "$PRG"`/$link"
fi
done
saveddir=`pwd`
M2_HOME=`dirname "$PRG"`/..
# make it fully qualified
M2_HOME=`cd "$M2_HOME" && pwd`
cd "$saveddir"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --unix "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Mingw, ensure paths are in UNIX format before anything is touched
if $mingw ; then
[ -n "$M2_HOME" ] &&
M2_HOME="`(cd "$M2_HOME"; pwd)`"
[ -n "$JAVA_HOME" ] &&
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
fi
if [ -z "$JAVA_HOME" ]; then
javaExecutable="`which javac`"
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
if $darwin ; then
javaHome="`dirname \"$javaExecutable\"`"
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
else
javaExecutable="`readlink -f \"$javaExecutable\"`"
fi
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
fi
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`\\unset -f command; \\command -v java`"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
if [ -z "$1" ]
then
echo "Path not specified to find_maven_basedir"
return 1
fi
basedir="$1"
wdir="$1"
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if [ -d "${wdir}" ]; then
wdir=`cd "$wdir/.."; pwd`
fi
# end of workaround
done
echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
fi
}
BASE_DIR=`find_maven_basedir "$(pwd)"`
if [ -z "$BASE_DIR" ]; then
exit 1;
fi
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found .mvn/wrapper/maven-wrapper.jar"
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
fi
if [ -n "$MVNW_REPOURL" ]; then
jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
else
jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
fi
while IFS="=" read key value; do
case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
esac
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
if [ "$MVNW_VERBOSE" = true ]; then
echo "Downloading from: $jarUrl"
fi
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
if $cygwin; then
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
fi
if command -v wget > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found wget ... using wget"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
else
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
fi
elif command -v curl > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found curl ... using curl"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
curl -o "$wrapperJarPath" "$jarUrl" -f
else
curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Falling back to using Java to download"
fi
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
# For Cygwin, switch paths to Windows format before running javac
if $cygwin; then
javaClass=`cygpath --path --windows "$javaClass"`
fi
if [ -e "$javaClass" ]; then
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Compiling MavenWrapperDownloader.java ..."
fi
# Compiling the Java class
("$JAVA_HOME/bin/javac" "$javaClass")
fi
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
# Running the downloader
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Running MavenWrapperDownloader.java ..."
fi
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
if [ "$MVNW_VERBOSE" = true ]; then
echo $MAVEN_PROJECTBASEDIR
fi
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --path --windows "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
$MAVEN_OPTS \
$MAVEN_DEBUG_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" \
"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

188
mvnw.cmd vendored Normal file
View File

@ -0,0 +1,188 @@
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM https://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM set title of command window
title %0
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
)
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
if exist %WRAPPER_JAR% (
if "%MVNW_VERBOSE%" == "true" (
echo Found %WRAPPER_JAR%
)
) else (
if not "%MVNW_REPOURL%" == "" (
SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
)
if "%MVNW_VERBOSE%" == "true" (
echo Couldn't find %WRAPPER_JAR%, downloading it ...
echo Downloading from: %DOWNLOAD_URL%
)
powershell -Command "&{"^
"$webclient = new-object System.Net.WebClient;"^
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
"}"^
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
"}"
if "%MVNW_VERBOSE%" == "true" (
echo Finished downloading %WRAPPER_JAR%
)
)
@REM End of extension
@REM Provide a "standardized" way to retrieve the CLI args that will
@REM work with both Windows and non-Windows executions.
set MAVEN_CMD_LINE_ARGS=%*
%MAVEN_JAVA_EXE% ^
%JVM_CONFIG_MAVEN_PROPS% ^
%MAVEN_OPTS% ^
%MAVEN_DEBUG_OPTS% ^
-classpath %WRAPPER_JAR% ^
"-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
%WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%"=="on" pause
if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
cmd /C exit /B %ERROR_CODE%

108
pom.xml Normal file
View File

@ -0,0 +1,108 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.emmerts</groupId>
<artifactId>Fotoverwaltung</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Fotoverwaltung</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>5.9.2</junit.version>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>19.0.2.1</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>19.0.2.1</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-swing</artifactId>
<version>19.0.2.1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-configuration2</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.drewnoakes</groupId>
<artifactId>metadata-extractor</artifactId>
<version>2.18.0</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-swing</artifactId>
<version>19.0.2.1</version>
</dependency>
<dependency>
<groupId>com.drewnoakes</groupId>
<artifactId>metadata-extractor</artifactId>
<version>2.18.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<source>19</source>
<target>19</target>
<annotationProcessorPaths>
<path>
<groupId>org.apache.commons</groupId>
<artifactId>commons-configuration2</artifactId>
<version>2.8.0</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.8</version>
<executions>
<execution>
<!-- Default configuration for running with: mvn clean javafx:run -->
<id>default-cli</id>
<configuration>
<mainClass>de.emmerts.fotoverwaltung/de.emmerts.fotoverwaltung.MainApplication</mainClass>
<launcher>app</launcher>
<jlinkZipName>app</jlinkZipName>
<jlinkImageName>app</jlinkImageName>
<noManPages>true</noManPages>
<stripDebug>true</stripDebug>
<noHeaderFiles>true</noHeaderFiles>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

8
settings.ini Normal file
View File

@ -0,0 +1,8 @@
[window]
lastWidth = 2725
lastHeight = 1368
[directories]
fileTreeJPG = P:\2009\2009_04_03 RR Stammtreff
fileTreeCR2 = F:\SchatzkammerCR2 1TB\2009\2009_04_03 RR Stammtreff

View File

@ -0,0 +1,78 @@
package de.emmerts.fotoverwaltung;
import javafx.collections.ObservableList;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.control.TreeItem;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.VBox;
import java.io.File;
import java.util.TreeMap;
public class FileTreeComponent extends VBox {
private FileTreeController controller;
public FileTreeComponent(){
FXMLLoader loader = new FXMLLoader(getClass().getResource("FileTree.fxml"));
try {
loader.setRoot(this);
loader.load();
controller = loader.getController();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void initialize(String id){
super.setId(id);
controller.id = getId();
String defaultDirectory = MainApplication.config.getString("directories."+id);
if(defaultDirectory != null) {
openDirectory(new File(defaultDirectory));
}
if(id.equals("fileTreeCR2"))
controller.treeView.setDisable(true);
}
public void openDirectory(File f)
{
controller.selectedDirectory = f;
controller.openDirectory();
}
public File getDirectory()
{
return controller.selectedDirectory;
}
/*
@FXML
protected void changeDirectory()
{
System.out.print("Button Clicked");
}*/
public void next()
{
/*
FileTreeItemComponent t = (FileTreeItemComponent) controller.treeView.getSelectionModel().getSelectedItem();
ObservableList<Node> children = controller.treeView.getChildrenUnmodifiable();
int index = children.indexOf(controller.treeView.getSelectionModel().getSelectedItem());
if(index < children.size() - 1){
Node nextSibling = children.get(index+1);
nextSibling.requestFocus();
}*/
TreeItem<String> toRemove = controller.treeView.getSelectionModel().getSelectedItem();
toRemove.getParent().getChildren().remove(toRemove);
KeyCode keyCode = KeyCode.DOWN;
KeyEvent keyPressEvent = new KeyEvent(KeyEvent.KEY_PRESSED, "", "", keyCode, false, false, false, false);
KeyEvent keyReleaseEvent = new KeyEvent(KeyEvent.KEY_RELEASED, "", "", keyCode, false, false, false, false);
controller.treeView.fireEvent(keyPressEvent);
controller.treeView.fireEvent(keyReleaseEvent);
}
public void displayTreeMap(TreeMap<String, File> files) {
controller.displayTreeMap(files);
}
}

View File

@ -0,0 +1,194 @@
package de.emmerts.fotoverwaltung;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.stage.DirectoryChooser;
import java.awt.*;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;
public class FileTreeController{
@FXML
public TreeView<String> treeView;
public Label label;
protected String id;
File selectedDirectory;
@FXML
private CheckBox allowAllFileExtensions;
@FXML
void initialize()
{
//label.setText(label.getParent().getAccessibleText());
treeView.getSelectionModel().selectedItemProperty().addListener( new ChangeListener() {
@Override
public void changed(ObservableValue observable, Object oldValue,
Object newValue) {
FileTreeItemComponent selectedItem = (FileTreeItemComponent) newValue;
if(selectedItem != null)
{
selectedItem.selectFileTreeItem();
MainApplication.currentFile = selectedItem.content;
}
// do what ever you want
}
});
}
@FXML
void allowAllFileExtensionsClick()
{
}
@FXML
protected void openDirectoryInOS()
{
//selectedDirectory
Desktop desktop = Desktop.getDesktop();
try {
desktop.open(selectedDirectory);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@FXML
protected void chooseDirectory(){
DirectoryChooser dChooser = new DirectoryChooser();
String defaultDirectory = MainApplication.config.getString("directories."+id);
if(defaultDirectory != null)
dChooser.setInitialDirectory(new File(defaultDirectory));
selectedDirectory = dChooser.showDialog(MainApplication.controller.rootStage);
if(selectedDirectory == null){
return;
}
if(id.equals("fileTreeJPG"))
{
String dir = selectedDirectory.getParentFile().getName();
File cr2Dir = MainApplication.controller.fileTreeCR2.getDirectory();
while(!cr2Dir.getName().equals(dir))
{
cr2Dir = cr2Dir.getParentFile();
}
cr2Dir = new File(cr2Dir+"\\"+selectedDirectory.getName());
MainApplication.controller.fileTreeCR2.openDirectory(cr2Dir);
}
openDirectory();
}
protected void openDirectory(){
MainApplication.config.setProperty("directories."+id, selectedDirectory.getAbsolutePath());
treeView.setRoot(getFileList(selectedDirectory, true));
}
FileTreeItemComponent getFileList(File root, boolean expand)
{
ArrayList<FileTreeItemComponent> files = new ArrayList<>();
ArrayList<FileTreeItemComponent> directories = new ArrayList<>();
File[] allFiles;
if(allowAllFileExtensions.isSelected())
allFiles = root.listFiles();
else
allFiles = root.listFiles(ff);
for (File file : allFiles) {
if(file.isDirectory())
directories.add(getFileList(file, false));
else
files.add(new FileTreeItemComponent(file));
}
FileTreeItemComponent temp = new FileTreeItemComponent(root);
temp.setExpanded(expand);
temp.getChildren().addAll(directories);
temp.getChildren().addAll(files);
return temp;
}
FileFilter ff = fileForFilter -> {
if(fileForFilter.isDirectory())
return true;
ArrayList<String> allowedExtensions = new ArrayList<>();
allowedExtensions.add(".cr2");
allowedExtensions.add(".jpg");
allowedExtensions.add(".jpeg");
allowedExtensions.add(".gif");
allowedExtensions.add(".png");
for (String allowedExtension : allowedExtensions) {
if (fileForFilter.getName().endsWith(allowedExtension) || fileForFilter.getName().endsWith(allowedExtension.toUpperCase()))
return true;
}
return false;
};
public void displayTreeMap(TreeMap<String, File> files) {
FileTreeItemComponent temp = new FileTreeItemComponent(files.firstEntry().getValue().getParentFile().getParentFile());
treeView.setRoot(temp);
temp.setExpanded(true);
Map.Entry<String,File> entry = files.pollFirstEntry();
while(entry != null)
{
File toBeAdded = entry.getValue();
temp.getChildren().add(new FileTreeItemComponent(toBeAdded));
entry = files.pollFirstEntry();
}
}
private FileTreeItemComponent getOrCreateDirectory(File directory)
{
FileTreeItemComponent blubb = (FileTreeItemComponent) treeView.getRoot();
for (TreeItem<String> child : blubb.getChildren()) {
FileTreeItemComponent childFTIC = (FileTreeItemComponent) child;
if(childFTIC.content.getAbsolutePath().equals(directory.getAbsolutePath())) {
return childFTIC;
}
}
FileTreeItemComponent newDirectory = new FileTreeItemComponent(directory);
blubb.getChildren().add(newDirectory);
newDirectory.setExpanded(true);
return newDirectory;
}
public void displayTreeMapOld(TreeMap<String, File> files) {
FileTreeItemComponent temp = new FileTreeItemComponent(files.firstEntry().getValue().getParentFile().getParentFile());
temp.setExpanded(true);
ArrayList<FileTreeItemComponent> images = new ArrayList<>();
Map.Entry<String, File> entry = files.pollFirstEntry();
FileTreeItemComponent lastDirectory = null;
while(entry != null) {
File f = entry.getValue();
if(lastDirectory == null)
{
lastDirectory = new FileTreeItemComponent(f.getParentFile());
images.add(new FileTreeItemComponent(f));
}else if(!lastDirectory.content.getAbsolutePath().equals(f.getParentFile().getAbsolutePath()))
{
lastDirectory.getChildren().addAll(images);
temp.getChildren().add(lastDirectory);
lastDirectory = new FileTreeItemComponent(f.getParentFile());
images = new ArrayList<>();
images.add(new FileTreeItemComponent(f));
}
else {
images.add(new FileTreeItemComponent(f));
entry = files.pollFirstEntry();
}
}
treeView.setRoot(temp);
}
}

View File

@ -0,0 +1,31 @@
package de.emmerts.fotoverwaltung;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.TreeItem;
import java.io.File;
public class FileTreeItemComponent extends TreeItem<String> {
File content;
public FileTreeItemComponent(File file){
content = file;
setValue(content.getName());
FXMLLoader loader = new FXMLLoader(getClass().getResource("FileTreeItem.fxml"));
try {
loader.setRoot(this);
loader.load();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
void selectFileTreeItem()
{
System.out.println(content.getAbsolutePath());
MainApplication.controller.displayImageFile(content);
}
}

View File

@ -0,0 +1,16 @@
package de.emmerts.fotoverwaltung;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
import javafx.scene.control.TreeItem;
import java.io.File;
public class FileTreeItemController {
@FXML
void initialize()
{
}
}

View File

@ -0,0 +1,52 @@
package de.emmerts.fotoverwaltung;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.TreeMap;
public class FindDiffs {
TreeMap<String, File> cr2s = new TreeMap<>();
TreeMap<String, File> jpg = new TreeMap<>();
String subdirectory = "2009";
public FindDiffs(String subdirectory)
{
this.subdirectory = subdirectory;
}
public void run()
{
File cr2Dir = new File("F:\\SchatzkammerCR2 1TB\\"+subdirectory);
File schatzDir = new File("P:\\"+subdirectory);
System.out.println(cr2Dir.getAbsolutePath());
System.out.println(schatzDir.getAbsolutePath());
traverse(schatzDir, "jpgs");
traverse(cr2Dir, "cr2s");
System.out.println("fertig "+cr2s.size()+" CR2 Dateien ohne JPG gefunden");
MainApplication.controller.fileTreeJPG.displayTreeMap(cr2s);
}
public void traverse(File directory, String type)
{
File[] files = directory.listFiles();
for (File file : files) {
if(!file.isDirectory())
{ String fullname = file.getAbsolutePath().toUpperCase();
if(type.equals("cr2s")) {
fullname = fullname.replace("F:\\SCHATZKAMMERCR2 1TB\\", "");
fullname = fullname.replace(".CR2", ".JPG");
if(!jpg.containsKey(fullname))
cr2s.put(fullname, file);
}
else {
fullname = fullname.replace("P:\\", "");
jpg.put(fullname, file);
}
}
else
traverse(file, type);
}
}
}

View File

@ -0,0 +1,184 @@
package de.emmerts.fotoverwaltung;
import javafx.application.Application;
import javafx.application.HostServices;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import org.apache.commons.configuration2.INIConfiguration;
import org.apache.commons.configuration2.ex.ConfigurationException;
import java.awt.Desktop;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Optional;
/*import org.apache.commons.configuration2;*/
public class MainApplication extends Application {
static MainController controller;
static File currentFile;
static INIConfiguration config = new INIConfiguration();
String iniFilename = "settings.ini";
@Override
public void start(Stage stage) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("MainApplication.fxml"));
try {
config.read(new FileReader(iniFilename));
} catch (ConfigurationException e) {
throw new RuntimeException(e);
}
int lastWidth = Integer.parseInt(config.getString("window.lastWidth"));
int lastHeight = Integer.parseInt(config.getString("window.lastHeight"));
Scene scene = new Scene(fxmlLoader.load(), lastWidth, lastHeight);
scene.widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
System.out.println("Scene width changed from " + oldValue + " to " + newValue);
config.setProperty("window.lastWidth", newValue.intValue());
}
});
scene.heightProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
System.out.println("Scene height changed from " + oldValue + " to " + newValue);
config.setProperty("window.lastHeight", newValue.intValue());
}
});
scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
switch (event.getCode()) {
case DELETE: deleteImage();
break;
case M: moveImage();
break;
case RIGHT: controller.fileTreeJPG.next();
default:
break;
}
}
});
stage.setTitle("Hello!");
stage.setScene(scene);
controller = fxmlLoader.getController();
controller.rootStage = stage;
stage.show();
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
try {
config.write(new FileWriter(iniFilename));
} catch (Exception e) {
throw new RuntimeException(e);
}
Platform.exit();
}
});
}
private void moveImage() {
System.out.println("Try to move "+currentFile.getAbsolutePath());
if(currentFile.isDirectory())
return;
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
alert.setTitle("Bestätigung");
alert.setHeaderText("Sind Sie sicher?");
alert.setContentText("Möchten Sie fortfahren?");
File cr2 = null;
Optional<ButtonType> result = alert.showAndWait();
if (result.get() == ButtonType.OK){
try{
controller.closeImageViewer();
String destination = currentFile.getParentFile().getAbsolutePath();
destination = destination.replace("F:\\SchatzkammerCR2 1TB\\", "");
destination = "P:\\"+destination+"\\"+currentFile.getName();
Files.move(currentFile.toPath(), new File(destination).toPath());
controller.fileTreeJPG.next();
}
catch (Exception e)
{
e.printStackTrace();
alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("Verschieben fehlgeschlagen");
alert.setContentText(e.getLocalizedMessage());
}
}
}
public static void main(String[] args) {
launch();
}
void deleteImage()
{
//controller.fileTreeJPG.
//controller.fileTreeJPG.
if(currentFile.isDirectory())
return;
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
alert.setTitle("Bestätigung");
alert.setHeaderText("Sind Sie sicher?");
alert.setContentText("Möchten Sie fortfahren?");
File cr2 = null;
if(currentFile.getName().toUpperCase().endsWith(".JPG"))
{
String fileName = currentFile.getName();
int extensionIndex = currentFile.getName().lastIndexOf('.');
if (extensionIndex > 0) {
fileName = fileName.substring(0, extensionIndex);
}
String directory = currentFile.getParentFile().getAbsolutePath();
if(!controller.cr2InSameDirectory.isSelected()) {
directory = controller.fileTreeCR2.getDirectory().getAbsolutePath();
}
cr2 = new File(directory+"\\"+fileName+".cr2");
if(!cr2.exists())
cr2 = new File(directory+"\\"+fileName+".CR2");
if(!cr2.exists())
cr2 = null;
}
Optional<ButtonType> result = alert.showAndWait();
if (result.get() == ButtonType.OK){
try{
controller.closeImageViewer();
boolean ret = currentFile.delete();
System.out.println("Try to delete "+currentFile.getAbsolutePath()+"... "+(ret?"success":"fail"));
if(cr2 != null) {
ret = cr2.delete();
System.out.println("Try to delete "+cr2.getAbsolutePath()+"... "+(ret?"success":"fail"));
}
controller.fileTreeJPG.next();
}
catch (Exception e)
{
e.printStackTrace();
alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("Löschen fehlgeschlafen");
alert.setContentText(e.getLocalizedMessage());
}
}
}
}

View File

@ -0,0 +1,158 @@
package de.emmerts.fotoverwaltung;
import com.drew.imaging.ImageMetadataReader;
import com.drew.imaging.ImageProcessingException;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.Tag;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.embed.swing.SwingFXUtils;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.image.BufferedImage;
import java.io.*;
public class MainController {
public StackPane sp;
public ImageView photoViewer;
public CheckBox cr2InSameDirectory;
public FileTreeComponent fileTreeJPG;
public FileTreeComponent fileTreeCR2;
public StackPane imageStackPane;
@FXML
private Label welcomeText;
protected Stage rootStage;
@FXML
void initialize()
{
fileTreeCR2.initialize("fileTreeCR2");
fileTreeJPG.initialize("fileTreeJPG");
File f = new File("C:\\Users\\Bene\\IdeaProjects\\Fotoverwaltung\\src\\main\\resources\\de\\emmerts\\fotoverwaltung\\image.png");
displayImageFile(f);
//todo Image aus Ressource auslesen:
//Image img= new Image(getClass().getResource("/path/in/your/package/structure/icon.png").toString());
}
@FXML
protected void onHelloButtonClick() {
}
public Metadata getExifData(File f){
Metadata metadata = null;
try {
metadata = ImageMetadataReader.readMetadata(f);
} catch (Exception e) {
throw new RuntimeException(e);
}
/*
for (Directory directory : metadata.getDirectories()) {
for (Tag tag : directory.getTags()) {
System.out.println("");
System.out.format("[%s] - %s = %s",
directory.getName(), tag.getTagName(), tag.getDescription());
}
if (directory.hasErrors()) {
for (String error : directory.getErrors()) {
System.err.format("ERROR: %s", error);
}
}
}*/
return metadata;
}
public void displayImageFile(File f)
{
if(f.isDirectory())
return;
Metadata exifs = getExifData(f);
outerLoop:
for (Directory directory : exifs.getDirectories()) {
for (Tag tag : directory.getTags()) {
if(tag.getTagName().equals("Orientation"))
{
String desc = tag.getDescription();
System.out.println(desc);
if(desc.contains("normal") || desc.contains("Horizontal"))
photoViewer.setRotate(0);
if(desc.contains("270 CW"))
photoViewer.setRotate(270);
if(desc.contains("180 CW"))
photoViewer.setRotate(180);
if(desc.contains("90 CW"))
photoViewer.setRotate(90);
//Left side, bottom (Rotate 270 CW)
//Top, left side (Horizontal / normal)
break outerLoop;
}
}
}
if(f.getName().toUpperCase().endsWith(".CR2"))
{
BufferedImage cr2Image = null;
try {
cr2Image = ImageIO.read(f);
} catch (IOException e) {
throw new RuntimeException(e);
}
// Convert the image data to a JavaFX Image
Image fxImage = SwingFXUtils.toFXImage(cr2Image, null);
photoViewer.setImage(fxImage);
return;
}
InputStream stream = null;
try {
stream = new FileInputStream(f.getAbsoluteFile());
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
Image image = new Image(stream);
photoViewer.setImage(image);
/*
//Creating the image view
ImageView imageView = new ImageView();
//Setting image to the image view
//Setting the image view parameters
imageView.setX(10);
imageView.setY(10);
imageView.setFitWidth(575);
imageView.setPreserveRatio(true);
//Setting the Scene object
photoViewer.getChildren().add(imageView);*/
}
void displayCr2(File file)
{
}
@FXML
void closeImageViewer(){
photoViewer.setImage(null);
System.gc();
}
public void findDiffs(ActionEvent actionEvent) {
String userInput = JOptionPane.showInputDialog(null, "Compare F:\\SchatzkammerCR2 1TB\\$Subdirectory with P:\\$Subdirectory? \nEnter a Subdirectory");
if(userInput != null) {
FindDiffs fd = new FindDiffs(userInput);
fd.run();
}
}
}

View File

@ -0,0 +1,11 @@
module de.emmerts.fotoverwaltung {
requires javafx.controls;
requires javafx.fxml;
requires org.apache.commons.configuration2;
requires metadata.extractor;
requires java.desktop;
requires javafx.swing;
opens de.emmerts.fotoverwaltung to javafx.fxml;
exports de.emmerts.fotoverwaltung;
}

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<fx:root type="javafx.scene.layout.VBox" xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="de.emmerts.fotoverwaltung.FileTreeController"
prefHeight="400.0" minWidth="300.0">
<Label fx:id="label"/>
<HBox>
<Button onAction="#chooseDirectory" text="choose directory"/>
<Button onAction="#openDirectoryInOS" text="open"/>
<CheckBox text="Alle Dateiendungen anzeigen" fx:id="allowAllFileExtensions" onAction="#allowAllFileExtensionsClick" visible="false"/>
</HBox>
<TreeView fx:id="treeView">
</TreeView>
</fx:root>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<fx:root type="javafx.scene.control.TreeItem" xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="de.emmerts.fotoverwaltung.FileTreeItemController" >
</fx:root>

View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.control.MenuBar?>
<?import de.emmerts.fotoverwaltung.FileTreeComponent?>
<?import javafx.scene.control.CheckBox?>
<VBox xmlns:fx="http://javafx.com/fxml"
fx:controller="de.emmerts.fotoverwaltung.MainController">
<MenuBar>
</MenuBar>
<HBox>
<padding>
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0"/>
</padding>
<CheckBox fx:id="cr2InSameDirectory" text="CR2 im gleichen Verzeichnis"/>
<Button onAction="#closeImageViewer">GC</Button>
<Button onAction="#findDiffs">find Diffs</Button>
</HBox>
<HBox>
<padding>
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0"/>
</padding>
<StackPane fx:id="sp">
</StackPane>
<FileTreeComponent fx:id="fileTreeJPG"/>
<FileTreeComponent fx:id="fileTreeCR2"/>
<StackPane prefHeight="3000" prefWidth="4000" fx:id="imageStackPane">
<ImageView fx:id="photoViewer" fitWidth="${imageStackPane.width}" fitHeight="${imageStackPane.height}" managed="false">
<x>10</x>
<y>10</y>
<preserveRatio>true</preserveRatio>
</ImageView>
</StackPane>
</HBox>
</VBox>

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path d="M22 16V4c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2zm-10.6-3.47l1.63 2.18 2.58-3.22c.2-.25.58-.25.78 0l2.96 3.7c.26.33.03.81-.39.81H9c-.41 0-.65-.47-.4-.8l2-2.67c.2-.26.6-.26.8 0zM2 7v13c0 1.1.9 2 2 2h13c.55 0 1-.45 1-1s-.45-1-1-1H5c-.55 0-1-.45-1-1V7c0-.55-.45-1-1-1s-1 .45-1 1z"/></svg>

After

Width:  |  Height:  |  Size: 444 B