Explorar o código

RIFFMASTER: BACKEND: add Song repository, service and controller

= %!s(int64=2) %!d(string=hai) anos
pai
achega
e50917296f
Modificáronse 29 ficheiros con 199 adicións e 16 borrados
  1. 6 13
      Backend/Spring/.idea/workspace.xml
  2. 1 0
      Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/configuration/SecurityConfiguration.java
  3. 3 1
      Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/controller/AppUserRESTController.java
  4. 94 0
      Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/controller/SongController.java
  5. 4 0
      Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/domain/Riff.java
  6. 6 1
      Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/domain/Song.java
  7. 14 0
      Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/repository/ISongRepository.java
  8. 19 0
      Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/service/ISongService.java
  9. 48 0
      Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/service/SongService.java
  10. BIN=BIN
      Backend/Spring/target/Spring-1.0-SNAPSHOT/WEB-INF/classes/pl/dmcs/jwoszczyk/configuration/SecurityConfiguration.class
  11. BIN=BIN
      Backend/Spring/target/Spring-1.0-SNAPSHOT/WEB-INF/classes/pl/dmcs/jwoszczyk/controller/AppUserController.class
  12. BIN=BIN
      Backend/Spring/target/Spring-1.0-SNAPSHOT/WEB-INF/classes/pl/dmcs/jwoszczyk/controller/AppUserRESTController.class
  13. BIN=BIN
      Backend/Spring/target/Spring-1.0-SNAPSHOT/WEB-INF/classes/pl/dmcs/jwoszczyk/controller/SongController.class
  14. BIN=BIN
      Backend/Spring/target/Spring-1.0-SNAPSHOT/WEB-INF/classes/pl/dmcs/jwoszczyk/domain/Riff.class
  15. BIN=BIN
      Backend/Spring/target/Spring-1.0-SNAPSHOT/WEB-INF/classes/pl/dmcs/jwoszczyk/domain/Song.class
  16. BIN=BIN
      Backend/Spring/target/Spring-1.0-SNAPSHOT/WEB-INF/classes/pl/dmcs/jwoszczyk/repository/ISongRepository.class
  17. BIN=BIN
      Backend/Spring/target/Spring-1.0-SNAPSHOT/WEB-INF/classes/pl/dmcs/jwoszczyk/service/ISongService.class
  18. BIN=BIN
      Backend/Spring/target/Spring-1.0-SNAPSHOT/WEB-INF/classes/pl/dmcs/jwoszczyk/service/SongService.class
  19. BIN=BIN
      Backend/Spring/target/classes/classpath.index
  20. BIN=BIN
      Backend/Spring/target/classes/pl/dmcs/jwoszczyk/configuration/SecurityConfiguration.class
  21. BIN=BIN
      Backend/Spring/target/classes/pl/dmcs/jwoszczyk/controller/AppUserController.class
  22. BIN=BIN
      Backend/Spring/target/classes/pl/dmcs/jwoszczyk/controller/AppUserRESTController.class
  23. BIN=BIN
      Backend/Spring/target/classes/pl/dmcs/jwoszczyk/controller/SongController.class
  24. BIN=BIN
      Backend/Spring/target/classes/pl/dmcs/jwoszczyk/domain/Riff.class
  25. BIN=BIN
      Backend/Spring/target/classes/pl/dmcs/jwoszczyk/domain/Song.class
  26. BIN=BIN
      Backend/Spring/target/classes/pl/dmcs/jwoszczyk/repository/ISongRepository.class
  27. BIN=BIN
      Backend/Spring/target/classes/pl/dmcs/jwoszczyk/service/ISongService.class
  28. BIN=BIN
      Backend/Spring/target/classes/pl/dmcs/jwoszczyk/service/SongService.class
  29. 4 1
      Frontend/RiffMasterFront/.idea/workspace.xml

+ 6 - 13
Backend/Spring/.idea/workspace.xml

@@ -10,19 +10,7 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="8315de53-8c15-472c-a710-45938463dc02" name="Changes" comment="RIFFMASTER: add frontend files">
-      <change beforePath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.angular/cache/16.0.4/angular-webpack/6fc734508214cf082987b690b9c397dd93e8a65f/0.pack" beforeDir="false" afterPath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.angular/cache/16.0.4/angular-webpack/6fc734508214cf082987b690b9c397dd93e8a65f/0.pack" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.angular/cache/16.0.4/angular-webpack/6fc734508214cf082987b690b9c397dd93e8a65f/1.pack" beforeDir="false" afterPath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.angular/cache/16.0.4/angular-webpack/6fc734508214cf082987b690b9c397dd93e8a65f/1.pack" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.angular/cache/16.0.4/angular-webpack/6fc734508214cf082987b690b9c397dd93e8a65f/13.pack" beforeDir="false" afterPath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.angular/cache/16.0.4/angular-webpack/6fc734508214cf082987b690b9c397dd93e8a65f/13.pack" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.angular/cache/16.0.4/angular-webpack/6fc734508214cf082987b690b9c397dd93e8a65f/2.pack" beforeDir="false" afterPath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.angular/cache/16.0.4/angular-webpack/6fc734508214cf082987b690b9c397dd93e8a65f/2.pack" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.angular/cache/16.0.4/angular-webpack/6fc734508214cf082987b690b9c397dd93e8a65f/3.pack" beforeDir="false" afterPath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.angular/cache/16.0.4/angular-webpack/6fc734508214cf082987b690b9c397dd93e8a65f/3.pack" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.angular/cache/16.0.4/angular-webpack/6fc734508214cf082987b690b9c397dd93e8a65f/4.pack" beforeDir="false" afterPath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.angular/cache/16.0.4/angular-webpack/6fc734508214cf082987b690b9c397dd93e8a65f/4.pack" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.angular/cache/16.0.4/angular-webpack/6fc734508214cf082987b690b9c397dd93e8a65f/6.pack" beforeDir="false" afterPath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.angular/cache/16.0.4/angular-webpack/6fc734508214cf082987b690b9c397dd93e8a65f/6.pack" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.angular/cache/16.0.4/angular-webpack/6fc734508214cf082987b690b9c397dd93e8a65f/index.pack" beforeDir="false" afterPath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.angular/cache/16.0.4/angular-webpack/6fc734508214cf082987b690b9c397dd93e8a65f/index.pack" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.angular/cache/16.0.4/angular-webpack/6fc734508214cf082987b690b9c397dd93e8a65f/index.pack.old" beforeDir="false" afterPath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.angular/cache/16.0.4/angular-webpack/6fc734508214cf082987b690b9c397dd93e8a65f/index.pack.old" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/src/app/login-page/login-page.component.css" beforeDir="false" afterPath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/src/app/login-page/login-page.component.css" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/src/app/register-page/register-page.component.css" beforeDir="false" afterPath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/src/app/register-page/register-page.component.css" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/src/app/register-page/register-page.component.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../Frontend/RiffMasterFront/src/app/register-page/register-page.component.html" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -207,7 +195,7 @@
       <workItem from="1686487272579" duration="477000" />
       <workItem from="1686487836712" duration="39000" />
       <workItem from="1686571848556" duration="1231000" />
-      <workItem from="1686583836581" duration="2951000" />
+      <workItem from="1686583836581" duration="9601000" />
     </task>
     <task id="LOCAL-00001" summary="add basic hello world and transfering data to server">
       <created>1679575346987</created>
@@ -450,6 +438,11 @@
           <line>88</line>
           <option name="timeStamp" value="1" />
         </line-breakpoint>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/src/main/java/pl/dmcs/jwoszczyk/configuration/SecurityConfiguration.java</url>
+          <line>69</line>
+          <option name="timeStamp" value="2" />
+        </line-breakpoint>
       </breakpoints>
     </breakpoint-manager>
   </component>

+ 1 - 0
Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/configuration/SecurityConfiguration.java

@@ -76,6 +76,7 @@ public class SecurityConfiguration {
 
         http
                 .authorizeHttpRequests((authz) -> authz
+                        .requestMatchers("/song**").hasAnyRole("ADMIN", "USER")
                         .requestMatchers("/appUsers*").hasAnyRole("ADMIN", "USER")
                         .requestMatchers("/appUserRole*").hasRole("ADMIN")
                         .requestMatchers("/exampleOne*").hasAuthority("ROLE_USER")

+ 3 - 1
Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/controller/AppUserRESTController.java

@@ -12,6 +12,7 @@ import java.util.List;
 @RestController
 @RequestMapping("appUserRest")
 public class AppUserRESTController {
+    //################################################################_Dependency Injection
 
     private IAppUserRepository appUserRepository;
 
@@ -19,7 +20,8 @@ public class AppUserRESTController {
     public AppUserRESTController(IAppUserRepository appUserRepository) {
         this.appUserRepository = appUserRepository;
     }
-	
+    //################################################################_REST methods
+
     @RequestMapping(value = "/{login}", method = RequestMethod.GET, produces = "application/json")
     public AppUser getAppUserInJSON(@PathVariable String login) {
         return appUserRepository.findByLogin(login);

+ 94 - 0
Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/controller/SongController.java

@@ -0,0 +1,94 @@
+package pl.dmcs.jwoszczyk.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import pl.dmcs.jwoszczyk.domain.Riff;
+import pl.dmcs.jwoszczyk.domain.Song;
+import pl.dmcs.jwoszczyk.repository.ISongRepository;
+import pl.dmcs.jwoszczyk.service.ISongService;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+
+@RestController
+@RequestMapping("song")
+public class SongController {
+
+    //################################################################_Dependency Injection
+    private ISongService songService;
+    @Autowired
+    public SongController(ISongService songRepository) {
+        this.songService = songRepository;
+    }
+
+    //################################################################_REST methods
+
+    @RequestMapping(method = RequestMethod.GET)
+    public ResponseEntity<List<Song>> getAllSongs() {
+        List<Song> songs = songService.getAllSongs();
+        return ResponseEntity.ok(songs);
+    }
+
+    @RequestMapping(value="/{id}", method = RequestMethod.GET)
+    public ResponseEntity<Song> getSongById(@PathVariable("id") long id) {
+        Optional<Song> song = Optional.ofNullable(songService.getSong(id));
+        if (song.isPresent()) {
+            return ResponseEntity.ok(song.get());
+        } else {
+            return ResponseEntity.notFound().build();
+        }
+    }
+
+    @RequestMapping(method = RequestMethod.POST)
+    public ResponseEntity<Song> addSong(@RequestBody Song song) {
+        Song addedSong = songService.addSong(song);
+        return ResponseEntity.status(HttpStatus.CREATED).body(addedSong);
+    }
+
+
+    @PutMapping("/{id}")
+    public ResponseEntity<Song> updateSong(@PathVariable("id") long id, @RequestBody Song updatedSong) {
+        Optional<Song> song = Optional.ofNullable(songService.getSong(id));
+        if (song.isPresent()) {
+            Song existingSong = song.get();
+            existingSong.setName(updatedSong.getName());
+            existingSong.setLink(updatedSong.getLink());
+            // Update other fields as needed
+            Song updatedSongEntity = songService.editSong(existingSong);
+            return ResponseEntity.ok(updatedSongEntity);
+        } else {
+            return ResponseEntity.notFound().build();
+        }
+    }
+
+    @DeleteMapping("/{id}")
+    public ResponseEntity<Void> deleteSong(@PathVariable("id") long id) {
+        Optional<Song> song = Optional.ofNullable(songService.getSong(id));
+        if (song.isPresent()) {
+            songService.removeSong(id);
+            return ResponseEntity.noContent().build();
+        } else {
+            return ResponseEntity.notFound().build();
+        }
+    }
+
+
+    @GetMapping("/{songId}/riffs")
+    public ResponseEntity<Set<Riff>> getRiffs(@PathVariable long songId) {
+        Optional<Song> optionalSong = Optional.ofNullable(songService.getSong(songId));
+        if (optionalSong.isPresent()) {
+            Song song = optionalSong.get();
+            Set<Riff> riffs = song.getRiffs();
+            return ResponseEntity.ok(riffs);
+        } else {
+            return ResponseEntity.notFound().build();
+        }
+    }
+
+    //################################################################_
+
+
+}

+ 4 - 0
Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/domain/Riff.java

@@ -7,6 +7,7 @@ import java.util.HashSet;
 import java.util.Set;
 
 @Entity
+@Table(name="riff")
 public class Riff {
 
 	//####################################################################_fields
@@ -16,6 +17,9 @@ public class Riff {
 	private String name;
 	private double startMs;
 	private double endMs;
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "song_id")
+	private Song song;
 	//####################################################################_accesors
 
 	public long getId() {

+ 6 - 1
Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/domain/Song.java

@@ -1,22 +1,27 @@
 package pl.dmcs.jwoszczyk.domain;
 
 import jakarta.persistence.*;
+import jakarta.validation.constraints.NotNull;
 
 import java.util.Date;
 import java.util.HashSet;
 import java.util.Set;
 
 @Entity
+@Table(name="song")
 public class Song {
 
 	//####################################################################_fields
 	@Id
 	@GeneratedValue(strategy = GenerationType.AUTO)
 	long id;
+	@NotNull
 	private String name;
 	private String link;
-	@ManyToMany(fetch = FetchType.EAGER)
+	//@ManyToMany(fetch = FetchType.EAGER)
+	@OneToMany(mappedBy = "song", cascade = CascadeType.ALL)
 	private Set<Riff> riffs = new HashSet<Riff>(0);
+	@NotNull
 	private double durationMs;
 	private long userId; //creator
 	private long lastUpdateUserId; //last updater of the song

+ 14 - 0
Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/repository/ISongRepository.java

@@ -0,0 +1,14 @@
+package pl.dmcs.jwoszczyk.repository;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import pl.dmcs.jwoszczyk.domain.AppUser;
+import pl.dmcs.jwoszczyk.domain.Song;
+
+import java.util.List;
+
+public interface ISongRepository  extends JpaRepository<Song, Long> {
+    List<Song> findByName(String lastName);
+    Song findById(long id);
+    Song findByUserId(long id);
+    void deleteById(long id);
+}

+ 19 - 0
Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/service/ISongService.java

@@ -0,0 +1,19 @@
+package pl.dmcs.jwoszczyk.service;
+
+import org.springframework.security.access.annotation.Secured;
+import org.springframework.security.access.prepost.PreAuthorize;
+import pl.dmcs.jwoszczyk.domain.AppUser;
+import pl.dmcs.jwoszczyk.domain.Song;
+
+import java.util.List;
+
+public interface ISongService {
+
+
+    public Song getSong(long id);
+    public List<Song> getAllSongs();
+    public Song addSong(Song song);
+    public Song editSong(Song song);
+    public void removeSong(long id);
+
+}

+ 48 - 0
Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/service/SongService.java

@@ -0,0 +1,48 @@
+package pl.dmcs.jwoszczyk.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Service;
+import pl.dmcs.jwoszczyk.domain.Song;
+import pl.dmcs.jwoszczyk.repository.IAppUserRepository;
+import pl.dmcs.jwoszczyk.repository.IAppUserRoleRepository;
+import pl.dmcs.jwoszczyk.repository.ISongRepository;
+
+import java.util.List;
+
+@Service
+public class SongService implements ISongService{
+
+    //#########################################################################_Dependency Injection
+    private ISongRepository songRepository;
+
+    @Autowired
+    public SongService(ISongRepository songRepository) {
+        this.songRepository = songRepository;
+    }
+    //#########################################################################_CRUD methods
+    @Override
+    public Song getSong(long id) {
+        return songRepository.findById(id);
+    }
+
+    @Override
+    public List<Song> getAllSongs() {
+        return songRepository.findAll();
+    }
+
+    @Override
+    public Song addSong(Song song) {
+        return songRepository.save(song);
+    }
+
+    @Override
+    public Song editSong(Song song) {
+        return songRepository.save(song);
+    }
+
+    @Override
+    public void removeSong(long id) {
+        songRepository.deleteById(id);
+    }
+}

BIN=BIN
Backend/Spring/target/Spring-1.0-SNAPSHOT/WEB-INF/classes/pl/dmcs/jwoszczyk/configuration/SecurityConfiguration.class


BIN=BIN
Backend/Spring/target/Spring-1.0-SNAPSHOT/WEB-INF/classes/pl/dmcs/jwoszczyk/controller/AppUserController.class


BIN=BIN
Backend/Spring/target/Spring-1.0-SNAPSHOT/WEB-INF/classes/pl/dmcs/jwoszczyk/controller/AppUserRESTController.class


BIN=BIN
Backend/Spring/target/Spring-1.0-SNAPSHOT/WEB-INF/classes/pl/dmcs/jwoszczyk/controller/SongController.class


BIN=BIN
Backend/Spring/target/Spring-1.0-SNAPSHOT/WEB-INF/classes/pl/dmcs/jwoszczyk/domain/Riff.class


BIN=BIN
Backend/Spring/target/Spring-1.0-SNAPSHOT/WEB-INF/classes/pl/dmcs/jwoszczyk/domain/Song.class


BIN=BIN
Backend/Spring/target/Spring-1.0-SNAPSHOT/WEB-INF/classes/pl/dmcs/jwoszczyk/repository/ISongRepository.class


BIN=BIN
Backend/Spring/target/Spring-1.0-SNAPSHOT/WEB-INF/classes/pl/dmcs/jwoszczyk/service/ISongService.class


BIN=BIN
Backend/Spring/target/Spring-1.0-SNAPSHOT/WEB-INF/classes/pl/dmcs/jwoszczyk/service/SongService.class


BIN=BIN
Backend/Spring/target/classes/classpath.index


BIN=BIN
Backend/Spring/target/classes/pl/dmcs/jwoszczyk/configuration/SecurityConfiguration.class


BIN=BIN
Backend/Spring/target/classes/pl/dmcs/jwoszczyk/controller/AppUserController.class


BIN=BIN
Backend/Spring/target/classes/pl/dmcs/jwoszczyk/controller/AppUserRESTController.class


BIN=BIN
Backend/Spring/target/classes/pl/dmcs/jwoszczyk/controller/SongController.class


BIN=BIN
Backend/Spring/target/classes/pl/dmcs/jwoszczyk/domain/Riff.class


BIN=BIN
Backend/Spring/target/classes/pl/dmcs/jwoszczyk/domain/Song.class


BIN=BIN
Backend/Spring/target/classes/pl/dmcs/jwoszczyk/repository/ISongRepository.class


BIN=BIN
Backend/Spring/target/classes/pl/dmcs/jwoszczyk/service/ISongService.class


BIN=BIN
Backend/Spring/target/classes/pl/dmcs/jwoszczyk/service/SongService.class


+ 4 - 1
Frontend/RiffMasterFront/.idea/workspace.xml

@@ -6,7 +6,10 @@
   <component name="ChangeListManager">
     <list default="true" id="d91bc08d-d968-4797-8fb3-ef602a37db2a" name="Changes" comment="RIFFMASTER: add frontend business logic (riff, song)">
       <change beforePath="$PROJECT_DIR$/../../Backend/Spring/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../../Backend/Spring/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/controller/AppUserController.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/controller/AppUserController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/configuration/SecurityConfiguration.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/configuration/SecurityConfiguration.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/controller/AppUserRESTController.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/controller/AppUserRESTController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/domain/Riff.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/domain/Riff.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/domain/Song.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../Backend/Spring/src/main/java/pl/dmcs/jwoszczyk/domain/Song.java" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />