]> git.laktatnebel.de Git - mp3manager.git/commitdiff
Initial project version
authorOle B. Rosentreter <ole@laktatnebel.de>
Fri, 27 Sep 2024 18:13:49 +0000 (20:13 +0200)
committerOle B. Rosentreter <ole@laktatnebel.de>
Fri, 27 Sep 2024 18:13:49 +0000 (20:13 +0200)
pom.xml [new file with mode: 0644]
src/main/java/de/obgit/product/mp3sort/MusicCrawler.java [new file with mode: 0644]
src/main/java/de/obgit/product/mp3sort/MusicDao.java [new file with mode: 0644]
src/main/java/de/obgit/product/mp3sort/MusicEntity.java [new file with mode: 0644]
src/main/resources/META-INF/persistence.xml [new file with mode: 0644]
src/main/resources/music_schema.sql [new file with mode: 0644]
src/main/resources/schema.sql [new file with mode: 0644]

diff --git a/pom.xml b/pom.xml
new file mode 100644 (file)
index 0000000..7094324
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,86 @@
+<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 http://maven.apache.org/maven-v4_0_0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+       <groupId>de.laktatnebel.tools</groupId>
+       <artifactId>mp3sort</artifactId>
+       <version>2.0.1-SNAPSHOT</version>
+
+       <name>Mp3Sort</name>
+
+       <parent>
+               <groupId>de.laktatnebel.maven</groupId>
+               <artifactId>laktatnebelproductstandalone</artifactId>
+               <version>2.0.0</version>
+       </parent>
+
+       <properties>
+               <filelib.version>1.2.3</filelib.version>
+               <commons-lang.version>2.6</commons-lang.version>
+       </properties>
+
+       <dependencyManagement>
+               <dependencies>
+                       <dependency>
+                               <groupId>commons-lang</groupId>
+                               <artifactId>commons-lang</artifactId>
+                               <version>${commons-lang.version}</version>
+                       </dependency>
+                       <dependency>
+                               <groupId>de.laktatnebel.libs</groupId>
+                               <artifactId>filelib</artifactId>
+                               <version>${filelib.version}</version>
+                       </dependency>
+                       <dependency>
+                               <groupId>org.apache.commons</groupId>
+                               <artifactId>commons-io</artifactId>
+                               <version>1.3.2</version>
+                       </dependency>
+                       <dependency>
+                               <groupId>commons-codec</groupId>
+                               <artifactId>commons-codec</artifactId>
+                               <version>1.10</version>
+                       </dependency>
+                       <dependency>
+                               <groupId>org.apache.openjpa</groupId>
+                               <artifactId>openjpa</artifactId>
+                               <version>2.4.1</version>
+                       </dependency>
+                       <dependency>
+                               <groupId>postgresql</groupId>
+                               <artifactId>postgresql</artifactId>
+                               <version>8.4-702.jdbc4</version>
+                       </dependency>
+                       <!-- dependency> <groupId>net.jthink</groupId> <artifactId>jaudiotagger</artifactId> 
+                               <version>2.2.6</version> </dependency -->
+               </dependencies>
+       </dependencyManagement>
+
+       <dependencies>
+               <dependency>
+                       <groupId>commons-lang</groupId>
+                       <artifactId>commons-lang</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>de.laktatnebel.libs</groupId>
+                       <artifactId>filelib</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.commons</groupId>
+                       <artifactId>commons-io</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>commons-codec</groupId>
+                       <artifactId>commons-codec</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.openjpa</groupId>
+                       <artifactId>openjpa</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>postgresql</groupId>
+                       <artifactId>postgresql</artifactId>
+               </dependency>
+               <!-- dependency> <groupId>net.jthink</groupId> <artifactId>jaudiotagger</artifactId> 
+                       </dependency -->
+       </dependencies>
+</project>
\ No newline at end of file
diff --git a/src/main/java/de/obgit/product/mp3sort/MusicCrawler.java b/src/main/java/de/obgit/product/mp3sort/MusicCrawler.java
new file mode 100644 (file)
index 0000000..6b4f22c
--- /dev/null
@@ -0,0 +1,69 @@
+package de.obgit.product.mp3sort;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.List;
+
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.io.FilenameUtils;
+
+import de.obgit.libs.filelib.DirectoryManager;
+import de.obgit.libs.filelib.exception.AbstractFileLibException;
+
+public class MusicCrawler {
+
+       public static void main(final String[] args) throws AbstractFileLibException {
+
+               final Path startPath = new File(args[0]).toPath();
+               final String mime = args[1];
+               final List<Path> pathListRecursivlyFromPath = DirectoryManager.getPathListRecursivlyFromPath(startPath, mime);
+
+               final MusicDao musicdao = new MusicDao();
+
+               for (final Path path : pathListRecursivlyFromPath) {
+                       System.out.println(path.toString());
+
+                       final File file = path.toFile();
+
+                       final String filename = file.getAbsolutePath();
+                       final String extension = FilenameUtils.getExtension(filename);
+                       final String baseName = FilenameUtils.getBaseName(filename);
+                       final String fullPath = FilenameUtils.getFullPath(filename);
+
+                       String md5 = "";
+                       long filesize = 0;
+                       String mimetype = null;
+
+                       try {
+                               mimetype = Files.probeContentType(path);
+                               filesize = Files.size(path);
+                               final FileInputStream fis = new FileInputStream(file);
+                               md5 = DigestUtils.md5Hex(fis);
+                               fis.close();
+                       } catch (final IOException ioe) {
+                               System.out.println(ioe.getMessage());
+                       }
+
+                       /*
+                        * Fingerprint herstellen Webservice aufrufen Daten in ID3-Tags
+                        * speichern
+                        */
+
+                       final String title = null;
+                       final String interpret = null;
+                       final String fingerprint = null;
+                       final String album = null;
+                       final String genre = null;
+                       final short trackNo = 0;
+                       final MusicEntity musicEntity = new MusicEntity(md5, fingerprint, filesize, baseName, extension, fullPath, mimetype, title, interpret, album, genre, trackNo);
+
+                       System.out.println(musicEntity.toString());
+
+                       musicdao.createEntity(musicEntity);
+
+               }
+       }
+}
diff --git a/src/main/java/de/obgit/product/mp3sort/MusicDao.java b/src/main/java/de/obgit/product/mp3sort/MusicDao.java
new file mode 100644 (file)
index 0000000..dedd190
--- /dev/null
@@ -0,0 +1,37 @@
+package de.obgit.product.mp3sort;\r
+\r
+import javax.persistence.EntityManager;\r
+import javax.persistence.EntityManagerFactory;\r
+import javax.persistence.EntityTransaction;\r
+import javax.persistence.Persistence;\r
+\r
+public class MusicDao {\r
+       EntityManagerFactory    emf;\r
+\r
+       public <T> void createEntity(final T entity) {\r
+               emf = Persistence.createEntityManagerFactory("de.obgit.product.mp3sort.PU");\r
+               final EntityManager em = emf.createEntityManager();\r
+               final EntityTransaction tx = em.getTransaction();\r
+               try {\r
+                       tx.begin();\r
+                       em.persist(entity);\r
+                       tx.commit();\r
+               } catch (final RuntimeException ex) {\r
+                       if ((tx != null) && tx.isActive()) {\r
+                               tx.rollback();\r
+                       }\r
+                       throw ex;\r
+               } finally {\r
+                       em.close();\r
+               }\r
+       }\r
+\r
+       public <T> T readEntity(final Class<T> clss, final Object id) {\r
+               final EntityManager em = emf.createEntityManager();\r
+               try {\r
+                       return em.find(clss, id);\r
+               } finally {\r
+                       em.close();\r
+               }\r
+       }\r
+}\r
diff --git a/src/main/java/de/obgit/product/mp3sort/MusicEntity.java b/src/main/java/de/obgit/product/mp3sort/MusicEntity.java
new file mode 100644 (file)
index 0000000..0724964
--- /dev/null
@@ -0,0 +1,218 @@
+package de.obgit.product.mp3sort;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+@Entity(name = "mugge")
+public class MusicEntity implements Serializable {
+
+       /**
+        *
+        */
+       private static final long       serialVersionUID        = 1L;
+
+       @Id
+       @GeneratedValue(strategy = GenerationType.AUTO)
+       @Column(name = "id")
+       private Long                            id;
+
+       @Column(name = "md5")
+       private String                          md5;
+
+       @Column(name = "fingerprint")
+       private String                          fingerprint;
+
+       @Column(name = "filesize")
+       private long                            filesize;
+
+       @Column(name = "basename")
+       private String                          basename;
+
+       @Column(name = "extension")
+       private String                          extension;
+
+       @Column(name = "path")
+       private String                          path;
+
+       @Column(name = "mimetype")
+       private String                          mimetype;
+
+       @Column(name = "title")
+       private String                          title;
+
+       @Column(name = "interpret")
+       private String                          interpret;
+
+       @Column(name = "album")
+       private String                          album;
+
+       @Column(name = "genre")
+       private String                          genre;
+
+       @Column(name = "trackNo")
+       private short                           trackNo;
+
+       public MusicEntity() {
+               super();
+               // TODO Auto-generated constructor stub
+       }
+
+       public MusicEntity(final String md5, final String fingerprint, final long filesize, final String basename, final String extension, final String path, final String mimetype, final String title, final String interpret, final String album, final String genre, final short trackNo) {
+               super();
+               setMd5(md5);
+               setFingerprint(fingerprint);
+               setFilesize(filesize);
+               setBasename(basename);
+               setExtension(extension);
+               setPath(path);
+               setMimetype(mimetype);
+               setTitle(title);
+               setInterpret(interpret);
+               setAlbum(album);
+               setGenre(genre);
+               setTrackNo(trackNo);
+       }
+
+       public Long getId() {
+               return id;
+       }
+
+       public void setId(final Long id) {
+               this.id = id;
+       }
+
+       public String getMd5() {
+               return md5;
+       }
+
+       public void setMd5(final String md5) {
+               this.md5 = md5;
+       }
+
+       public String getFingerprint() {
+               return fingerprint;
+       }
+
+       public void setFingerprint(final String fingerprint) {
+               this.fingerprint = fingerprint;
+       }
+
+       public long getFilesize() {
+               return filesize;
+       }
+
+       public void setFilesize(final long filesize) {
+               this.filesize = filesize;
+       }
+
+       public String getBasename() {
+               return basename;
+       }
+
+       public void setBasename(final String basename) {
+               this.basename = basename;
+       }
+
+       public String getExtension() {
+               return extension;
+       }
+
+       public void setExtension(final String extension) {
+               this.extension = extension;
+       }
+
+       public String getPath() {
+               return path;
+       }
+
+       public void setPath(final String path) {
+               this.path = path;
+       }
+
+       public String getMimetype() {
+               return mimetype;
+       }
+
+       public void setMimetype(final String mimetype) {
+               this.mimetype = mimetype;
+       }
+
+       public String getTitle() {
+               return title;
+       }
+
+       public void setTitle(final String title) {
+               this.title = title;
+       }
+
+       public String getInterpret() {
+               return interpret;
+       }
+
+       public void setInterpret(final String interpret) {
+               this.interpret = interpret;
+       }
+
+       public String getAlbum() {
+               return album;
+       }
+
+       public void setAlbum(final String album) {
+               this.album = album;
+       }
+
+       public String getGenre() {
+               return genre;
+       }
+
+       public void setGenre(final String genre) {
+               this.genre = genre;
+       }
+
+       public short getTrackNo() {
+               return trackNo;
+       }
+
+       public void setTrackNo(final short trackNo) {
+               this.trackNo = trackNo;
+       }
+
+       @Override
+       public String toString() {
+               final StringBuffer sb = new StringBuffer();
+               sb.append("MusicEntity [id=");
+               sb.append(id);
+               sb.append(", md5=");
+               sb.append(md5);
+               sb.append(", fingerprint=");
+               sb.append(fingerprint);
+               sb.append(", filesize=");
+               sb.append(filesize);
+               sb.append(", basename=");
+               sb.append(basename);
+               sb.append(", extension=");
+               sb.append(extension);
+               sb.append(", path=");
+               sb.append(path);
+               sb.append(", mimetype=");
+               sb.append(mimetype);
+               sb.append(", title=");
+               sb.append(title);
+               sb.append(", interpret=");
+               sb.append(interpret);
+               sb.append(", album=");
+               sb.append(album);
+               sb.append(", genre=");
+               sb.append(genre);
+               sb.append(", trackNo=");
+               sb.append(trackNo);
+               sb.append("]");
+               return sb.toString();
+       }
+
+}
diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml
new file mode 100644 (file)
index 0000000..2870206
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<persistence version="1.0"\r
+       xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+       xsi:schemaLocation="http://java.sun.com/xml/ns/persistence\r
+                        http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">\r
+       <persistence-unit name="de.obgit.product.mp3sort.PU"\r
+               transaction-type="RESOURCE_LOCAL">\r
+               <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>\r
+               <class>de.obgit.product.mp3sort.MusicEntity</class>\r
+               <properties>\r
+                       <property name="openjpa.ConnectionURL" value="jdbc:postgresql://localhost:5432/music" />\r
+                       <property name="openjpa.ConnectionDriverName" value="org.postgresql.Driver" />\r
+                       <property name="openjpa.ConnectionUserName" value="oleb" />\r
+                       <property name="openjpa.ConnectionPassword" value="wpj_9+L6ukX+SN2-" />\r
+                       <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />\r
+                       <property name="openjpa.jdbc.DBDictionary" value="postgres" />\r
+                       <property\r
+                               name="javax.persistence.schema-generation.create-database-schemas"\r
+                               value="true" />\r
+               </properties>\r
+       </persistence-unit>\r
+</persistence>
\ No newline at end of file
diff --git a/src/main/resources/music_schema.sql b/src/main/resources/music_schema.sql
new file mode 100644 (file)
index 0000000..8875f2c
--- /dev/null
@@ -0,0 +1,35 @@
+CREATE SCHEMA music;\r
+\r
+ALTER SCHEMA music OWNER TO postgres;\r
+\r
+SET search_path = music, pg_catalog;\r
+\r
+SET default_tablespace = '';\r
+\r
+SET default_with_oids = false;\r
+\r
+CREATE TABLE music_files (\r
+    id SERIAL,\r
+    md5 character varying(64)\r
+    filepath text,\r
+    filename character varying(192),\r
+    fileextension character varying(8),\r
+    filesize integer DEFAULT 0 NOT NULL,\r
+        mimetype character varying(64),\r
+    genre character varying(64),\r
+    band character varying(128),\r
+    album character varying(128),\r
+    track character varying(128),\r
+    track_no smallint DEFAULT 0 NOT NULL\r
+);\r
+\r
+ALTER TABLE music.music_files OWNER TO postgres;\r
+\r
+\r
+ALTER TABLE ONLY music_files ADD CONSTRAINT music_files_pkey PRIMARY KEY (id);\r
+\r
+REVOKE ALL ON SCHEMA music FROM PUBLIC;\r
+REVOKE ALL ON SCHEMA music FROM postgres;\r
+GRANT ALL ON SCHEMA music TO postgres;\r
+GRANT ALL ON SCHEMA music TO PUBLIC;\r
+\r
diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql
new file mode 100644 (file)
index 0000000..477f20e
--- /dev/null
@@ -0,0 +1,19 @@
+CREATE TABLE album_drop
+(
+  id bigint NOT NULL,
+  basename character varying(255),
+  extension character varying(255),
+  filesize bigint,
+  height integer,
+  md5 character varying(255),
+  mimetype character varying(255),
+  orientation character varying(255),
+  path character varying(255),
+  width integer,
+  CONSTRAINT album_drop_pkey PRIMARY KEY (id)
+)
+WITH (
+  OIDS=FALSE
+);
+ALTER TABLE album_drop
+  OWNER TO oleb;