DatabaseInterface

database

## Class DatabaseInterface

- java.lang.Object
- - database.DatabaseInterface

-     public class DatabaseInterface
      extends java.lang.Object

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `private Database` | `database`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `DatabaseInterface(java.lang.String user, java.lang.String pass, java.lang.String url)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `closeConnection()`
    `void` | `deleteInstrument(int category)` loescht alle alten Eintraege der Instrumente einer Kategorie
    `void` | `deleteNoteAmount(int category)` loescht alle alten Eintraege der Notenhaeufigkeiten einer Kategorie
    `void` | `deleteTonality(int category)` loescht alle alten Eintraege der Tonarten einer Kategorie
    `private boolean` | `exists(IMotif motif)`
    `java.util.LinkedList<java.lang.Integer>` | `getAllMotifsForCategory(int category_id)` liefert eine LinkedList mit den IDs der Motife der uebergebenen Kategorie
    `int[][]` | `getBeatTransition(int categoryId)` liefert die Wahrscheinlichkeiten der Taktuebergaenge der angegebenen Kategorie
    `java.util.HashMap<java.lang.String,java.lang.Integer>` | `getCategories(java.lang.String username)`
    `java.util.LinkedHashMap<java.lang.String,java.lang.Integer>` | `getCategoriesOrdered()` liefert eine Liste der Kategorien sortiert nach Name absteigend
    `int` | `getCategoryIdForName(java.lang.String name)`
    `int[]` | `getCategoryNumeratorAndDenominator(int category_id)` liefert den Numerator und Denominator des Motifs
    `java.lang.String` | `getCreatorOfCategory(int categoryId)`
    `java.lang.String` | `getCreatorOfMotif(int motifId)`
    `private int` | `getIDForNote(java.lang.String s)` liefert zur uebergebenen Note die ID i Taktuebergangsarray
    `int` | `getIdForUsername(java.lang.String name)`
    `java.util.ArrayList<IInstrument>` | `getInstruments(int category_id)` liefert eine ArrayList mit IInstrument-Objekten der uebergebenen Kategorie
    `java.util.LinkedList<java.lang.Integer>` | `getInterestingMotifsForCategory(int category_id, int interesting)` liefert eine LinkedList mit den IDs der Motife der uebergebenen Kategorie und Interessantheitsmass
    `int[]` | `getMinAndMaxNoteCount(int category_id)` liefert die maximale und minimale Notenanzahl der Takte einer Kategorie
    `Beat` | `getMonophonMotif(int motif_id)` liefert das monophone Motif aus der Datenbank
    `int` | `getMotifDefaultInstrument(int id)`
    `java.util.ArrayList<INote>` | `getMotifDetails(int id)`
    `java.lang.String` | `getMotifKey(int motif_id)` liefert die Tonart des Motifs
    `java.lang.String` | `getMotifName(int id)`
    `int[]` | `getMotifNumeratorAndDenominator(int motif_id)` liefert den Numerator und Denominator des Motifs
    `int` | `getMotifPPQN(int id)`
    `java.util.ArrayList<java.lang.Integer>` | `getMotifsIds(java.lang.String username)`
    `java.util.ArrayList<java.lang.Integer>` | `getMotifsIdsOfCategoryId(int categoryId)`
    `double` | `getMotifTempo(int id)`
    `private int` | `getMultiBeatNoteCount(int motif_id)` liefert die Anzahl der Noten (Spaltenanzahl) fuer das MultiBeatArray
    `private int` | `getMultiBeatRowCount(int motif_id)` liefert die Anzahl der Phrasen (Zeilenanzahl) fuer das MultiBeatArray
    `java.util.ArrayList<INoteAmount>` | `getNoteAmounts(int category_id)` liefert eine ArrayList mit INoteAmount-Objekten der uebergebenen Kategorie
    `java.util.ArrayList<INoteAmount>` | `getNoteAmountsGroupByNote(int category_id)` liefert eine ArrayList mit INoteAmount-Objekten der uebergebenen Kategorie gruppiert nach Note (alle C nur 1 Wert, alle C#, ...)
    `MultiBeat` | `getPolyphonMotif(int motif_id)` liefert das polyphone Motif aus der Datenbank
    `int` | `getRandomInstrumentFromCategory(int category_id, int from, int to)` liefert die ID eines verwendeten Instruments einer bestimmten Kategorie, welches zwischen 'from' und 'to' liegt (MIDI-ID) from und to sind die Grenzen der Instrumentengruppe zB.: 0-7 bei Piano, 8-15 bei Chromatic Percussion, etc.
    `int[]` | `getRandomMotifForCategoryAndInstrument(int category_id, int instrument, int count, int tempo, boolean major, int numerator)` liefert die ID eines zufaelligen Motifs einer bestimmten Kategorie und eines bestimmten Instruments (MIDI-ID)
    `int[]` | `getRandomMotifForCategoryAndInstrumentGroup(int category_id, int instrument_from, int instrument_to, int count, int tempo, boolean major, int numerator)` liefert die ID eines zufaelligen Motifs einer bestimmten Kategorie und eines bestimmten Instruments (MIDI-ID)
    `java.util.LinkedList<java.lang.Integer>` | `getSpecificMotifsForCategory(int category_id, int tempo, int interesting)` liefert eine LinkedList mit den IDs der Motife der uebergebenen Kategorie, Tempos und Interessantheitsmass
    `java.util.LinkedList<java.lang.Integer>` | `getTempoMotifsForCategory(int category_id, int tempo)` liefert eine LinkedList mit den IDs der Motife der uebergebenen Kategorie und Tempos
    `java.util.ArrayList<ITonality>` | `getTonalities(int category_id)` liefert eine ArrayList mit ITonality-Objekten der uebergebenen Kategorie
    `void` | `insertBeatTransition(java.util.ArrayList<BeatTransition> bt, int categoryId)` erstellt einen neuen Taktuebergang fuer die Kategorie bzw. ueberschreibt diesen, falls er schon existiert
    `int` | `insertCategory(java.lang.String name, java.lang.String username)`
    `int` | `insertInstrument(IInstrument instrument)` fuegt eine neue Instrumentkategorie zu einer Kategorie hinzu bzw. updated den Wert, falls dieser schon existiert
    `void` | `insertMonophonMotif(MotifData motif, int categoryId, boolean submotifs)` speichert ein monophones Motiv in der Datenbank
    `void` | `insertMotif(IMotif motif, java.lang.String username, int categoryId)`
    `void` | `insertMotifWithoutExistCheck(IMotif motif, java.lang.String username, int categoryId, int userId)` fuegt ein Motife in die DB ein, ohne zu pruefen, ob dieses schon existiert
    `int` | `insertNoteAmount(INoteAmount note)` fuegt eine neue Note mit Auftrittswahrscheinlichkeit zu einer Kategorie hinzu
    `int` | `insertOrGetCategory(java.lang.String name, java.lang.String username)` legt eine neue Kategorie an und liefert deren ID bzw. falls diese schon vorhanden ist, liefert die ID der Kategorie
    `int` | `insertOrGetPolyNote(int pitch, double duration)` legt eine neue PolyNote an und liefert deren ID bzw. falls diese schon vorhanden ist, liefert die ID der PolyNote
    `void` | `insertPolyphonMotif(MultiMotifData motif, int categoryId, boolean submotifs)` speichert ein polyphones Motiv in der Datenbank
    `int` | `insertTonality(ITonality tonality)` fuegt eine neue Tonart zu einer Kategorie hinzu bzw. updated den Wert, falls diese schon existiert
    `boolean` | `isDatabaseConnectionUp()`
    `boolean` | `isPolyphonMotif(int motif_id)` gibt an, ob ein Motif polyphon oder monophon ist
    `boolean` | `login(java.lang.String user, byte[] pass)`
    `boolean` | `login(java.lang.String user, java.lang.String pass)`
    `private MultiBeat` | `removeOnlyRestFromMultiBeat(MultiBeat mb)` loescht Takte des MultiBeats, welche nur aus Pausen bestehen
    `void` | `setBeatInterestingMeasures(int category_id)` aktualisiert das Interessantheitsmass der Takte; die vorher bestimmten Notenhaeufigkeiten werden dafuer herangezogen; beinhaltet ein Takt eine oder mehrere Noten, welche haeufig in der Kategorie vertreten sind gilt es als interessanter
    `void` | `setBeatTempo(int category_id)` aktualisiert das Tempo der Takte
    `void` | `setNewPassword(java.lang.String username, java.lang.String password)`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### database

          private Database database

  - ### Constructor Detail

    - #### DatabaseInterface

          public DatabaseInterface(java.lang.String user,
                           java.lang.String pass,
                           java.lang.String url)

  - ### Method Detail

    - #### isDatabaseConnectionUp

          public boolean isDatabaseConnectionUp()

    - #### exists

          private boolean exists(IMotif motif)

    - #### closeConnection

          public void closeConnection()

    - #### getCategories

          public java.util.HashMap<java.lang.String,java.lang.Integer> getCategories(java.lang.String username)

    - #### getCategoryIdForName

          public int getCategoryIdForName(java.lang.String name)

    - #### getCreatorOfCategory

          public java.lang.String getCreatorOfCategory(int categoryId)

    - #### getCreatorOfMotif

          public java.lang.String getCreatorOfMotif(int motifId)

    - #### getMotifsIdsOfCategoryId

          public java.util.ArrayList<java.lang.Integer> getMotifsIdsOfCategoryId(int categoryId)

    - #### getIdForUsername

          public int getIdForUsername(java.lang.String name)

    - #### getMotifsIds

          public java.util.ArrayList<java.lang.Integer> getMotifsIds(java.lang.String username)

    - #### setNewPassword

          public void setNewPassword(java.lang.String username,
                            java.lang.String password)

    - #### login

          public boolean login(java.lang.String user,
                      java.lang.String pass)

    - #### login

          public boolean login(java.lang.String user,
                      byte[] pass)

    - #### getMotifName

          public java.lang.String getMotifName(int id)

    - #### getMotifTempo

          public double getMotifTempo(int id)

    - #### getMotifPPQN

          public int getMotifPPQN(int id)

    - #### getMotifDefaultInstrument

          public int getMotifDefaultInstrument(int id)

    - #### getMotifDetails

          public java.util.ArrayList<INote> getMotifDetails(int id)

    - #### insertCategory

          public int insertCategory(java.lang.String name,
                           java.lang.String username)

    - #### insertMotif

          public void insertMotif(IMotif motif,
                         java.lang.String username,
                         int categoryId)

    - #### insertMotifWithoutExistCheck

          public void insertMotifWithoutExistCheck(IMotif motif,
                                          java.lang.String username,
                                          int categoryId,
                                          int userId)

      fuegt ein Motife in die DB ein, ohne zu pruefen, ob dieses schon existiert
      Parameters:
        `motif` - das Motif
        `username` - der Benutzername
        `categoryId` - die Kategorie, zu der das Motif gehoert
        `userId` - die Benutzer-ID

    - #### insertOrGetCategory

          public int insertOrGetCategory(java.lang.String name,
                                java.lang.String username)

      legt eine neue Kategorie an und liefert deren ID bzw. falls diese schon vorhanden ist, liefert die ID der Kategorie
      Parameters:
        `name` - Name der Kategorie
        `username` - Benutzername
      Returns:
        ID der angelegten oder vorhandenen Kategorie

    - #### insertNoteAmount

          public int insertNoteAmount(INoteAmount note)

      fuegt eine neue Note mit Auftrittswahrscheinlichkeit zu einer Kategorie hinzu
      Parameters:
        `note` - das NoteAmountObjekt

    - #### deleteNoteAmount

          public void deleteNoteAmount(int category)

      loescht alle alten Eintraege der Notenhaeufigkeiten einer Kategorie
      Parameters:
        `category` - ID der Kategorie

    - #### deleteInstrument

          public void deleteInstrument(int category)

      loescht alle alten Eintraege der Instrumente einer Kategorie
      Parameters:
        `category` - ID der Kategorie

    - #### deleteTonality

          public void deleteTonality(int category)

      loescht alle alten Eintraege der Tonarten einer Kategorie
      Parameters:
        `category` - ID der Kategorie

    - #### getNoteAmounts

          public java.util.ArrayList<INoteAmount> getNoteAmounts(int category_id)

      liefert eine ArrayList mit INoteAmount-Objekten der uebergebenen Kategorie
      Parameters:
        `category_id` - die ID der Kategorie
      Returns:
        ArrayList mit INoteAmount-Objekten

    - #### getNoteAmountsGroupByNote

          public java.util.ArrayList<INoteAmount> getNoteAmountsGroupByNote(int category_id)

      liefert eine ArrayList mit INoteAmount-Objekten der uebergebenen Kategorie gruppiert nach Note (alle C nur 1 Wert, alle C#, ...)
      Parameters:
        `category_id` - die ID der Kategorie
      Returns:
        ArrayList mit INoteAmount-Objekten

    - #### insertInstrument

          public int insertInstrument(IInstrument instrument)

      fuegt eine neue Instrumentkategorie zu einer Kategorie hinzu bzw. updated den Wert, falls dieser schon existiert
      Parameters:
        `instrument` - das InstrumentObjekt

    - #### getInstruments

          public java.util.ArrayList<IInstrument> getInstruments(int category_id)

      liefert eine ArrayList mit IInstrument-Objekten der uebergebenen Kategorie
      Parameters:
        `category_id` - die ID der Kategorie
      Returns:
        ArrayList mit IInstrument-Objekten

    - #### insertTonality

          public int insertTonality(ITonality tonality)

      fuegt eine neue Tonart zu einer Kategorie hinzu bzw. updated den Wert, falls diese schon existiert
      Parameters:
        `tonality` - das TonalityObjekt

    - #### getTonalities

          public java.util.ArrayList<ITonality> getTonalities(int category_id)

      liefert eine ArrayList mit ITonality-Objekten der uebergebenen Kategorie
      Parameters:
        `category_id` - die ID der Kategorie
      Returns:
        ArrayList mit ITonality-Objekten

    - #### getCategoriesOrdered

          public java.util.LinkedHashMap<java.lang.String,java.lang.Integer> getCategoriesOrdered()

      liefert eine Liste der Kategorien sortiert nach Name absteigend
      Returns:
        Liste der Kategorien

    - #### insertOrGetPolyNote

          public int insertOrGetPolyNote(int pitch,
                                double duration)

      legt eine neue PolyNote an und liefert deren ID bzw. falls diese schon vorhanden ist, liefert die ID der PolyNote
      Parameters:
        `pitch` - Pitch der Note
        `duration` - quantisierte Dauer der Note
      Returns:
        ID der angelegten oder vorhandenen PolyNote

    - #### insertMonophonMotif

          public void insertMonophonMotif(MotifData motif,
                                 int categoryId,
                                 boolean submotifs)

      speichert ein monophones Motiv in der Datenbank
      Parameters:
        `motif` - das monophone Motiv
        `categoryId` - Kategorie, zu der das Motiv gehoert
        `submotifs` - true: alle Vorkommnisse werden in der DB angelegt, false: nur die Vorlage wird abgelegt

    - #### insertPolyphonMotif

          public void insertPolyphonMotif(MultiMotifData motif,
                                 int categoryId,
                                 boolean submotifs)

      speichert ein polyphones Motiv in der Datenbank
      Parameters:
        `motif` - das polyphone Motiv
        `categoryId` - Kategorie, zu der das Motiv gehoert
        `submotifs` - true: alle Vorkommnisse werden in der DB angelegt, false: nur die Vorlage wird abgelegt

    - #### insertBeatTransition

          public void insertBeatTransition(java.util.ArrayList<BeatTransition> bt,
                                  int categoryId)

      erstellt einen neuen Taktuebergang fuer die Kategorie bzw. ueberschreibt diesen, falls er schon existiert
      Parameters:
        `bt` - ArrayList mit den Taktuebergaengen
        `categoryId` - ID der zugehoerigen Kategorie

    - #### getBeatTransition

          public int[][] getBeatTransition(int categoryId)

      liefert die Wahrscheinlichkeiten der Taktuebergaenge der angegebenen Kategorie
      Parameters:
        `categoryId` - ID der zugehoerigen Kategorie
      Returns:
        Array mit den Wahrscheinlichkeiten der Taktuebergaenge (Zeilen-/Spaltenreihenfolge 0-10 : C, C#, D, Eb, E, F, F#, G, Ab, A, Bb, B)

    - #### getIDForNote

          private int getIDForNote(java.lang.String s)

      liefert zur uebergebenen Note die ID i Taktuebergangsarray
      Parameters:
        `s` - Note (zB.: C, C#, D, Eb, ...)
      Returns:
        ID im Array

    - #### getMonophonMotif

          public Beat getMonophonMotif(int motif_id)

      liefert das monophone Motif aus der Datenbank
      Parameters:
        `motif_id` - ID des Motifs
      Returns:
        das Motif als Beat (Takt)

    - #### getPolyphonMotif

          public MultiBeat getPolyphonMotif(int motif_id)

      liefert das polyphone Motif aus der Datenbank
      Parameters:
        `motif_id` - ID des Motifs
      Returns:
        das Motif als MultiBeat (polyphoner Takt)

    - #### getMotifNumeratorAndDenominator

          public int[] getMotifNumeratorAndDenominator(int motif_id)

      liefert den Numerator und Denominator des Motifs
      Parameters:
        `motif_id` - ID des Motifs
      Returns:
        Numerator (ID: 0) und Denominator (ID: 1)

    - #### getCategoryNumeratorAndDenominator

          public int[] getCategoryNumeratorAndDenominator(int category_id)

      liefert den Numerator und Denominator des Motifs
      Parameters:
        `category_id` - ID der Kategorie
      Returns:
        Numerator (ID: 0) und Denominator (ID: 1)

    - #### getMotifKey

          public java.lang.String getMotifKey(int motif_id)

      liefert die Tonart des Motifs
      Parameters:
        `motif_id` - ID des Motifs
      Returns:
        Tonart (zB.: C Major, A Minor, ...)

    - #### removeOnlyRestFromMultiBeat

          private MultiBeat removeOnlyRestFromMultiBeat(MultiBeat mb)

      loescht Takte des MultiBeats, welche nur aus Pausen bestehen
      Parameters:
        `mb` - ein MultiBeat (polyphoner Takt)
      Returns:
        der korrekte MultiBeat

    - #### getMultiBeatNoteCount

          private int getMultiBeatNoteCount(int motif_id)

      liefert die Anzahl der Noten (Spaltenanzahl) fuer das MultiBeatArray
      Parameters:
        `motif_id` - ID des Motifs
      Returns:
        Anzahl der Noten

    - #### getMultiBeatRowCount

          private int getMultiBeatRowCount(int motif_id)

      liefert die Anzahl der Phrasen (Zeilenanzahl) fuer das MultiBeatArray
      Parameters:
        `motif_id` -
      Returns:
        Anzahl der Phrasen

    - #### isPolyphonMotif

          public boolean isPolyphonMotif(int motif_id)

      gibt an, ob ein Motif polyphon oder monophon ist
      Parameters:
        `motif_id` - ID des Motifs
      Returns:
        true ... polyphone, false ... monophone

    - #### getAllMotifsForCategory

          public java.util.LinkedList<java.lang.Integer> getAllMotifsForCategory(int category_id)

      liefert eine LinkedList mit den IDs der Motife der uebergebenen Kategorie
      Parameters:
        `category_id` - ID der Kategorie
      Returns:
        Liste der IDs der Motife der Kategorie

    - #### getTempoMotifsForCategory

          public java.util.LinkedList<java.lang.Integer> getTempoMotifsForCategory(int category_id,
                                                                          int tempo)

      liefert eine LinkedList mit den IDs der Motife der uebergebenen Kategorie und Tempos
      Parameters:
        `category_id` - ID der Kategorie
        `tempo` - Geschwindigkeit des Motifs (0...langsam, 1...normal, 2...schnell)
      Returns:
        Liste der IDs der Motife der Kategorie

    - #### getInterestingMotifsForCategory

          public java.util.LinkedList<java.lang.Integer> getInterestingMotifsForCategory(int category_id,
                                                                                int interesting)

      liefert eine LinkedList mit den IDs der Motife der uebergebenen Kategorie und Interessantheitsmass
      Parameters:
        `category_id` - ID der Kategorie
        `interesting` - Interessantheitsmass des Motifs (0...wenig interessant, 1...interessant, 2...sehr interessant)
      Returns:
        Liste der IDs der Motife der Kategorie

    - #### getSpecificMotifsForCategory

          public java.util.LinkedList<java.lang.Integer> getSpecificMotifsForCategory(int category_id,
                                                                             int tempo,
                                                                             int interesting)

      liefert eine LinkedList mit den IDs der Motife der uebergebenen Kategorie, Tempos und Interessantheitsmass
      Parameters:
        `category_id` - ID der Kategorie
        `tempo` - Geschwindigkeit des Motifs (0...langsam, 1...normal, 2...schnell)
        `interesting` - Interessantheitsmass des Motifs (0...wenig interessant, 1...interessant, 2...sehr interessant)
      Returns:
        Liste der IDs der Motife der Kategorie

    - #### getMinAndMaxNoteCount

          public int[] getMinAndMaxNoteCount(int category_id)

      liefert die maximale und minimale Notenanzahl der Takte einer Kategorie
      Parameters:
        `category_id` - ID der Kategorie
      Returns:
        zweidimensionales Integer-Array mit Minimum (ID: 0) und Maximum (ID: 1)

    - #### setBeatTempo

          public void setBeatTempo(int category_id)

      aktualisiert das Tempo der Takte
      Parameters:
        `category_id` -

    - #### setBeatInterestingMeasures

          public void setBeatInterestingMeasures(int category_id)

      aktualisiert das Interessantheitsmass der Takte; die vorher bestimmten Notenhaeufigkeiten werden dafuer herangezogen; beinhaltet ein Takt eine oder mehrere Noten, welche haeufig in der Kategorie vertreten sind gilt es als interessanter
      Parameters:
        `category_id` -

    - #### getRandomMotifForCategoryAndInstrument

          public int[] getRandomMotifForCategoryAndInstrument(int category_id,
                                                     int instrument,
                                                     int count,
                                                     int tempo,
                                                     boolean major,
                                                     int numerator)

      liefert die ID eines zufaelligen Motifs einer bestimmten Kategorie und eines bestimmten Instruments (MIDI-ID)
      Parameters:
        `category_id` - ID der Kategorie
        `instrument` - ID des Instruments
        `count` - Anzahl der Werte
        `tempo` - Tempo des Motifs (0..langsam, 1..normal, 2..schnell)
        `major` - true wenn major, false wenn minor
        `numerator` - Numerator zB.: 4 (bei 4/4-Takt), 3 (bei 3/4-Takt), ...
      Returns:
        Array der IDs zufaelliger Motife (koennen mono- oder polyphon sein)

    - #### getRandomMotifForCategoryAndInstrumentGroup

          public int[] getRandomMotifForCategoryAndInstrumentGroup(int category_id,
                                                          int instrument_from,
                                                          int instrument_to,
                                                          int count,
                                                          int tempo,
                                                          boolean major,
                                                          int numerator)

      liefert die ID eines zufaelligen Motifs einer bestimmten Kategorie und eines bestimmten Instruments (MIDI-ID)
      Parameters:
        `category_id` - ID der Kategorie
        `instrument_from` - ID des Instruments ersten Instruments der Instrumentengruppe
        `instrument_to` - ID des Instruments letzten Instruments der Instrumentengruppe
        `count` - Anzahl der Werte
        `tempo` - Tempo des Motifs (0..langsam, 1..normal, 2..schnell)
        `major` - true wenn major, false wenn minor
        `numerator` - Numerator zB.: 4 (bei 4/4-Takt), 3 (bei 3/4-Takt), ...
      Returns:
        Array der IDs zufaelliger Motife (koennen mono- oder polyphon sein)

    - #### getRandomInstrumentFromCategory

          public int getRandomInstrumentFromCategory(int category_id,
                                            int from,
                                            int to)

      liefert die ID eines verwendeten Instruments einer bestimmten Kategorie, welches zwischen 'from' und 'to' liegt (MIDI-ID) from und to sind die Grenzen der Instrumentengruppe zB.: 0-7 bei Piano, 8-15 bei Chromatic Percussion, etc.
      Parameters:
        `category_id` - ID der Kategorie
        `from` - untere Schranke der ID
        `to` - obere Schranke der ID
      Returns:
        ID eines Instruments