Skip to content

Commit

Permalink
Release 1.0 (#30)
Browse files Browse the repository at this point in the history
* Added sonarcloud as linter and also .editorconfig file for the formatter (#2)

* Added sonarcloud as linter and also .editorconfig file for the formatter

* Moved github actions

* Changed project structure to work

* Updated to java 17

* Fixed smells

* Added exclusion for sonarcloud

* Added root for config file

Co-authored-by: Joshua Lehmann <[email protected]>

* Add md-file to explain gui mockups

The gui.md file explains the library, album, attribute-editor sidebar
and update mockups.

* Add javafx and maven plugins, javafx dependencies

* Add directories, classes and fxml file for javafx

* ImageMetaManager-5 Updated to the latest javaFX version to fix build issue.

* Added logger (#7)

* Add logging dependencies

* Added slf4j and logback for logging

* Added configuration file for logback

Co-authored-by: leonardo.lang <[email protected]>

* Add use case diagram (#9)

* ImageMetaManager-4 Added files for use case diagram

* ImageMetaManager-4 Added diagram and some description

* ImageMetaManager-4 Added description for use case diagram

* Beschreibung für Metadaten UseCases hinzugefügt.

* Updated table of contents

* Image meta manager 8 json storage (#10)

* ImageMetaManager-8 Removed the module-info.java since it is no longer needed

* ImageMetaManager-8 Added album entity and first test to write jo json file

* #8 Added a unit test

* #8 Configured code coverage report

* #8 Changing test to work in pipeline and added album file

* #8 Removed test code from main method

* Fix fxml path argument

Added the parent folder to the fxml path for it to work on VSCode.

* #8 Added new methods to interact with albums and images

* #5 Added tests and improved file handling

* #5 Improved Test coverage

* #5 Improved Test coverage

Co-authored-by: leonardo.lang <[email protected]>

* Update gitignore to exclude logs

* Add logging dependencies

* Added slf4j and logback for logging

* Added configuration file for logback

* Add basic scenes layout

* #8 Configured code coverage report

* #8 Changing test to work in pipeline and added album file

* #8 Added new methods to interact with albums and images

* Add scenes and controller methods

* Remove unused primary view

* Removed module info

* Change to scenes instead of tabs

* #13 Added first draft of album gui

* #13 Added first draft of album gui

* #13 Added first version of album overview page and possibility to open an album

* #13 Lower code coverage, can be increased again later

* #13 Removed controllers form code coverage for now

* #13 Fixed tests

* wip: Update album view to display images

* wip: Add initialize and createImagePane methods

* Remove unused imports

* wip: Update createImagePane, initializeAlbum methods

Refactor the initialize method to initializeAlbum because initialize is
executed before the album is received through the SceneController.

* wip: Update album view to display images

* Remove unused GridPane from album view

* Update createImagePane method to utilize ColumnConstraints

ColumnConstraints allow an easier layout setup for the imageMetaPane.

* Fix column overflow in initializeAlbum method

* Fix code smells

* Refactor album controller to use a method for the label creation

* 17 improve library gui (#18)

* #17 Albums are now placed correctly in the grid

* #13 You can now add a new album to the library

* #13 Removed unnecessary method

* #13 Fixed tests

* #13 Fixed code smell

* Add delete button to album view

* Update imports

* Update imagePane method to style selected images

* Add method to update album status

* Add method to delete selected images

* Fix initializeAlbum method

After deleting the selected images, they were still shown. This is not a
desired state to be in, so the imageGrid's children get cleared to avoid
this behavior.

* Fix deleteImage method

If the deletion process was cancelled the selected images were still
selected. This selection should be removed after cancelling the
deleltion process.

If the user tried to delete no images, he was not alerted that this is
an invalid operation.

* Fix bugs

String was compared using equals operator instead of equals method.

The confirmation choice has to be present before it's value can be
compared to a desired value.

* Fix code smells

Remove unnecessary System.out usages.

Use the isEmpty method to check if a list is empty or not.

* Refactor to use descriptive variable names

* Refactor to use a class level ImageService

* Refactor deleteImage method for readability

* #17 Removed static

* Added placeholder image

* Album add image (#20)

* Add an add button in the GUI to add new images

* Add an addImage method to add new images

* Fix status label alignment

Within an HBox the status label can not be positioned in the center
(vertically and horizontally). A VBox resolves this issue.

* Remove unused IOException

* Add method to write default directory to JSON

The default directory is used to open the explorer in the last directory
it was opened, when an image was added. The directory was not stored
permanently and afer every restart of the application the default
directory would be reset.

* Add method to get the default directory from JSON

* Remove unused imports and variables

* Fix code smells

* Add image view to edit an image's metadata

* Add ImageController

* Add changeScene method

Because the AlbumController will not use an Event to change scenes the
current changeScene method can't be used. A new changeScene method with
a Scene instead of an Event as a parameter solves this.

* Add empty method and set ImageController as view controller

* Add edit button to album controller

* Add editImage method

* Fix column constraint usage

* Update initializeImage method to display metadata

* Change layout of image view

The horizontal layout with the image and the metadata description next
to each other only allowed a small image.

A vertical layout allows the image to be bigger while still having
enough space to display metadata descriptions.

* Refactor warnUser to alertUser method

By passing the AlertType as an argument the alertUser method can be
used for all kinds of alerts.

* Fix minor code smell

* Fix instanceof check and cast with pattern matching

* #12 Improved the changeScene method to only one method used

* #12 Allow preview features to allow switch statement in SceneController.java

* Revert "#12 Allow preview features to allow switch statement in SceneController.java"

This reverts commit 180850e.

* Refactor switch to if-else statement

The switch statement would only work with the preview feature but
VSCode doesn't support it correctly.

* Fix addImage method

After adding an image a case occured where a selected image couldn't be
edited, because more than one image was selected. Clearing the image
selection after adding an image resolves this issue.

* Add go back button (#23)

* Add condition to check if data is null

* Add Library button to go back to the library

* Add goToLibrary method

Currently there's no way to go back to the library view, once we're in
the album view. The goToLibrary method allows the user to go back to the
library view.

* Add Album button to go back to the album

* Add method to get Album by id

* Add goToAlbum method

* Added test to full fill test coverage

---------

Co-authored-by: joshua-lehmann <[email protected]>

* Add method to get the default directory from JSON

* #16 Added imaging library and created empty service

* #16 First draft of exif service

* #16 first draft of exif service

* #16 Added methods to get standard and extended tags in a map together with the label

* #16 Removed unused ENUM

* #16 Fixed duplicate var

* #16 Fixed tests

* #16 Fixed tests

* Refactor to display actual exif tags

* Remove unused method exportImageValues

* Add initialize method to ImageController

* Refactor to display actual exif tags

* Remove done TODO

* Add documentation (#26)

* Remove unused md-file

* Add md for documentation

* Add link to documentation in README

* Add user documentation for each view

* wip:Documentate implementation

* Add application images

* wip:Add images to documentation

* wip:Documentate implementation

* Add condition to check if album image capcity is reached

* Add isLibraryFull method

* doc:Add hints about max capacity of library and album

* Fix code smell

* #16 implement exif tag writing (#28)

* #16 First version

* #16 Added possibility to write exif tags

* #16 Added possibility to write exif tags

* #16 You can now update exif tags in the GUI

* doc:Update image view documentation

---------

Co-authored-by: leonardo.lang <[email protected]>

* Add interface (#29)

* #16 Added more documentation and an interface

* Fix wrong names

* Fixed typos

* Added TOC

* Removed border

---------

Co-authored-by: Joshua Lehmann <[email protected]>
Co-authored-by: leonardo.lang <[email protected]>
Co-authored-by: theGreyPilgrim42 <[email protected]>
  • Loading branch information
4 people authored Feb 26, 2023
1 parent 4a878b8 commit ad4271b
Show file tree
Hide file tree
Showing 45 changed files with 2,153 additions and 24 deletions.
37 changes: 37 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: SonarCloud
on:
push:
branches:
- main
- dev
pull_request:
types: [opened, synchronize, reopened]
jobs:
build:
name: Build and analyze
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
- name: Set up JDK 17
uses: actions/setup-java@v1
with:
java-version: 17
- name: Cache SonarCloud packages
uses: actions/cache@v1
with:
path: ~/.sonar/cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar
- name: Cache Maven packages
uses: actions/cache@v1
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Build and analyze
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=joshua-lehmann_ImageMetaManager
3 changes: 3 additions & 0 deletions ImageMetaManager/.gitignore → .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
### Project files ###
/src/main/resources/application-pwd.yml
/logs

target/
!.mvn/wrapper/maven-wrapper.jar
Expand All @@ -23,5 +24,7 @@ target/

### VS Code ###
.vscode/
/.vscode/


/src/test/resources/storage/
15 changes: 15 additions & 0 deletions .run/App.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="App" type="Application" factoryName="Application" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="ch.hftm.App"/>
<module name="ImageMetaManager"/>
<extension name="coverage">
<pattern>
<option name="PATTERN" value="ch.hftm.*"/>
<option name="ENABLED" value="true"/>
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true"/>
</method>
</configuration>
</component>
27 changes: 27 additions & 0 deletions Documentation/Diagrams/UseCase.puml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
@startuml useCaseDiagram
'https://plantuml.com/use-case-diagram

left to right direction

:User:

package Album {
User --> (Album erstellen)
User --> (Album loeschen)
User --> (Album anzeigen)
}

package Bilder {
User --> (Bilder uploaden)
User --> (Bild loeschen)
}

package Metadaten {
User --> (Metadaten anzeigen)
(Metadaten bearbeiten) .> (Metadaten anzeigen) : extends
User --> (Metadaten speichern)
}

User --> (Statusbar anzeigen)

@enduml
1 change: 1 addition & 0 deletions Documentation/Diagrams/useCaseDiagram.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions Documentation/GUI/Album.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions Documentation/GUI/Attribute_Editor.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions Documentation/GUI/Library.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions Documentation/GUI/MetaImageManager.drawio
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<mxfile host="app.diagrams.net" modified="2022-12-14T19:49:43.300Z" agent="5.0 (Windows)" etag="ZxHGRrVjh2opvzDd3ij5" version="20.6.2" type="device"><diagram name="Bibliothek" id="2cc2dc42-3aac-f2a9-1cec-7a8b7cbee084">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</diagram></mxfile>
4 changes: 4 additions & 0 deletions Documentation/GUI/Upload.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
52 changes: 52 additions & 0 deletions Documentation/UseCase.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Use Case Diagram

<!-- TOC -->
- [Use Case Diagram](#use-case-diagram)
* [Einleitung](#einleitung)
* [Album](#album)
+ [Album erstellen](#album-erstellen)
+ [Album löschen](#album-löschen)
+ [Album anzeigen](#album-anzeigen)
* [Bilder](#bilder)
+ [Bilder uploaden](#bilder-uploaden)
+ [Bild loeschen](#bild-loeschen)
* [Metadaten](#metadaten)
+ [Metadaten anzeigen](#metadaten-anzeigen)
+ [Metadaten bearbeiten](#metadaten-bearbeiten)
+ [Metadaten speichern](#metadaten-speichern)
* [Statusbar](#statusbar)
+ [Statusbar anzeigen](#statusbar-anzeigen)
<!-- TOC -->

## Einleitung
This use case diagram is based on the [UseCase.puml](Diagrams/UseCase.puml) file. It is displayed as svg which is generated by using the plantuml [command line](https://plantuml.com/command-line) tool like this:
`java -jar "D:\Work\Tools\plantuml.jar" D:\Work\Projects\ImageMetaManager\Documentation\Diagrams\UseCase.puml -o D:\Work\Projects\ImageMetaManager\Documentation\Diagrams -tsvg`

![UseCaseDiagram](Diagrams/useCaseDiagram.svg)

## Album
### Album erstellen
Der User kann ein neues Album erstellen mit einem eigenen Namen. Das Album dient als "Container" für mehrere Bilder.
### Album löschen
Ein Album kann wieder gelöscht werden. Es werden auch alle zugehörigen Bildinformationen gelöscht.
Die Bilder werden nur aus dem MetaImageManager gelöscht, die Originalbilder auf der Festplatte bleiben vorhanden.
### Album anzeigen
Der User kann ein Album anzeigen, er sieht dann alle darin enthaltenen Bilder.

## Bilder
### Bilder uploaden
Der User kann ein neues Bild uploaden, es wird dann in einem Album angezeigt und der Bildname und Pfad werden in der JSON Datei welche als Datenbank dient gespeichert.
### Bild loeschen
Der User kann ein Bild loeschen. Dadurch wird es aus dem Album entfernt und aus der JSON Datenbank. Auf dem Dateisystem bleibt das Bild weiterhin bestehen.

## Metadaten
### Metadaten anzeigen
Der User kann für ein bestimmtes Bild die Metadaten anzeigen. Es soll in eine Art "Key Value" Pair angezeigt werden, wobei der Key der Eigenschaftsname ist und der Value der Wert der Eigenschaft.
### Metadaten bearbeiten
Der User kann bestimmte (aber nicht alle) Metadaten Eigenschaften bearbeiten und deren Wert updaten über das GUI.
### Metadaten speichern
Der Usser kann die geänderten Werte bestätigen und speichern. Diese werden dann in der Bilddatei direkt in den exif Attributen abgespeichert.

## Statusbar
### Statusbar anzeigen
Das System muss in jedem Screen eine Statusbar anzeigen, welche relevante Informationen zum aktuellen Screen beinhaltet. Beispielsweise anzahl Bilder oder Notifications wie "Änderungen gespeichert" etc.
Loading

0 comments on commit ad4271b

Please sign in to comment.