From 4e17156b631d189041948e3bd642b0b6397d7992 Mon Sep 17 00:00:00 2001 From: "Ole B. Rosentreter" Date: Fri, 27 Sep 2024 20:13:49 +0200 Subject: [PATCH 1/1] Initial project version --- pom.xml | 86 +++++++ .../obgit/product/mp3sort/MusicCrawler.java | 69 ++++++ .../de/obgit/product/mp3sort/MusicDao.java | 37 +++ .../de/obgit/product/mp3sort/MusicEntity.java | 218 ++++++++++++++++++ src/main/resources/META-INF/persistence.xml | 22 ++ src/main/resources/music_schema.sql | 35 +++ src/main/resources/schema.sql | 19 ++ 7 files changed, 486 insertions(+) create mode 100644 pom.xml create mode 100644 src/main/java/de/obgit/product/mp3sort/MusicCrawler.java create mode 100644 src/main/java/de/obgit/product/mp3sort/MusicDao.java create mode 100644 src/main/java/de/obgit/product/mp3sort/MusicEntity.java create mode 100644 src/main/resources/META-INF/persistence.xml create mode 100644 src/main/resources/music_schema.sql create mode 100644 src/main/resources/schema.sql diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..7094324 --- /dev/null +++ b/pom.xml @@ -0,0 +1,86 @@ + + 4.0.0 + de.laktatnebel.tools + mp3sort + 2.0.1-SNAPSHOT + + Mp3Sort + + + de.laktatnebel.maven + laktatnebelproductstandalone + 2.0.0 + + + + 1.2.3 + 2.6 + + + + + + commons-lang + commons-lang + ${commons-lang.version} + + + de.laktatnebel.libs + filelib + ${filelib.version} + + + org.apache.commons + commons-io + 1.3.2 + + + commons-codec + commons-codec + 1.10 + + + org.apache.openjpa + openjpa + 2.4.1 + + + postgresql + postgresql + 8.4-702.jdbc4 + + + + + + + + commons-lang + commons-lang + + + de.laktatnebel.libs + filelib + + + org.apache.commons + commons-io + + + commons-codec + commons-codec + + + org.apache.openjpa + openjpa + + + postgresql + postgresql + + + + \ 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 index 0000000..6b4f22c --- /dev/null +++ b/src/main/java/de/obgit/product/mp3sort/MusicCrawler.java @@ -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 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 index 0000000..dedd190 --- /dev/null +++ b/src/main/java/de/obgit/product/mp3sort/MusicDao.java @@ -0,0 +1,37 @@ +package de.obgit.product.mp3sort; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.EntityTransaction; +import javax.persistence.Persistence; + +public class MusicDao { + EntityManagerFactory emf; + + public void createEntity(final T entity) { + emf = Persistence.createEntityManagerFactory("de.obgit.product.mp3sort.PU"); + final EntityManager em = emf.createEntityManager(); + final EntityTransaction tx = em.getTransaction(); + try { + tx.begin(); + em.persist(entity); + tx.commit(); + } catch (final RuntimeException ex) { + if ((tx != null) && tx.isActive()) { + tx.rollback(); + } + throw ex; + } finally { + em.close(); + } + } + + public T readEntity(final Class clss, final Object id) { + final EntityManager em = emf.createEntityManager(); + try { + return em.find(clss, id); + } finally { + em.close(); + } + } +} 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 index 0000000..0724964 --- /dev/null +++ b/src/main/java/de/obgit/product/mp3sort/MusicEntity.java @@ -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 index 0000000..2870206 --- /dev/null +++ b/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,22 @@ + + + + org.apache.openjpa.persistence.PersistenceProviderImpl + de.obgit.product.mp3sort.MusicEntity + + + + + + + + + + + \ 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 index 0000000..8875f2c --- /dev/null +++ b/src/main/resources/music_schema.sql @@ -0,0 +1,35 @@ +CREATE SCHEMA music; + +ALTER SCHEMA music OWNER TO postgres; + +SET search_path = music, pg_catalog; + +SET default_tablespace = ''; + +SET default_with_oids = false; + +CREATE TABLE music_files ( + id SERIAL, + md5 character varying(64) + filepath text, + filename character varying(192), + fileextension character varying(8), + filesize integer DEFAULT 0 NOT NULL, + mimetype character varying(64), + genre character varying(64), + band character varying(128), + album character varying(128), + track character varying(128), + track_no smallint DEFAULT 0 NOT NULL +); + +ALTER TABLE music.music_files OWNER TO postgres; + + +ALTER TABLE ONLY music_files ADD CONSTRAINT music_files_pkey PRIMARY KEY (id); + +REVOKE ALL ON SCHEMA music FROM PUBLIC; +REVOKE ALL ON SCHEMA music FROM postgres; +GRANT ALL ON SCHEMA music TO postgres; +GRANT ALL ON SCHEMA music TO PUBLIC; + diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql new file mode 100644 index 0000000..477f20e --- /dev/null +++ b/src/main/resources/schema.sql @@ -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; -- 2.39.5