Hi!
UPDATE: Version 1.0 Beta 1
Mal wieder was für mein "Privatforum" :D.
BMyMind heißt das gute Stück (ich liebe den Moment, wo ich anfangen will zu coden und Netbeans geradezu ultimativ einen Projektnamen verlangt... die Kreativität ist einfach immer unterirdisch).
Man kann damit alle möglichen Arten von Daten verwalten. Der Vorteil für den User ist, dass er es unter einer (hoffentlich) intuitive Oberfläche tun kann. Die Definition der Datenbank geschieht indirekt über eine XML-Datei. In dieser Datei legt man fest, wie die Daten präsentiert werden sollen und verknüpft sie (was in den allermeisten, einfachen Fällen BMyMind selbst erledigt).
Es gibt eine Vielzahl vorgefertigter Typen, die die Präsentation der Daten deutlich über das Niveau einer tabellenbasierten Datenbank heben. So lassen sich beispielsweise Daten in beliebigem Format darstellen und bequem aus einem Kalender wählen oder das Alter aus einer Spalte berechnen, die ein (Geburts-)Datum enthält.
Ein realistisches Beispiel einer Ausgangsdatei sieht folgendermaßen aus:
<?xml version="1.0" encoding="UTF-8"?>
<warehouse>
<tab title="Personendaten">
<item type="image" title="Bild" maxHeight="100" source="Bild" />
<item type="text" title="Vorname" primaryKey="yes" searchResult="yes" source="Vorname" />
<item type="text" title="Nachname" primaryKey="yes" searchResult="yes" source="Nachname" />
<item type="text" title="Geburtsname" source="Geburtsname" />
<item type="text" title="Weitere Vornamen" source="Weitere_Vornamen" />
<item type="text" title="Rufname" source="Rufname" />
<item type="space" height="10" />
<item type="onechoice" subType="combo" autocomplete="yes" title="Geschlecht" options="unbekannt;männlich;weiblich" default="unbekannt" free="no" source="Geschlecht" />
<item type="space" height="10" />
<item type="date" title="Geburtsdatum" internalDateFormat="yyyy-MM-dd" externalDateFormat="EEEEEEEEE, dd.MM.yyyy" searchResult="yes" source="Geburtsdatum" />
<item type="age" title="Alter" source="Geburtsdatum" internalDateFormat="yyyy-MM-dd" options="y" text="Jahre" />
</tab>
<tab title="Kontakt">
<item type="address" title="Adresse" source="Adresse;PLZ;Ort" mapLink="yes"/>
<item type="onechoice" subType="combo" autocomplete="yes" title="Bundesland" options="unbekannt;Baden-Württemberg;Bayern;Berlin;Brandenburg;Bremen;Hamburg;Hessen;Mecklenburg-Vorpommern;Niedersachsen;Nordrhein-Westfalen;Rheinland-Pfalz;Saarland;Sachsen;Sachsen-Anhalt;Schleswig-Holstein;Thüringen" free="no" default="unbekannt" source="Bundesland" />
<item type="onechoice" subType="combo" title="Land" options="Deutschland" free="yes" default="Deutschland" source="Land" />
<item type="longtext" title="Frühere Adresse" height="60" source="Frühere_Adresse" />
<item type="space" height="15" />
<item type="text" title="Telefon (Festnetz)" source="Telefon_Festnetz" />
<item type="text" title="Telefon (Handy)" source="Telefon_Handy" />
</tab>
<tab title="Persönliches">
<item type="multichoice" subType="checkbox" title="Freundeskreis" options="Verwandtschaft;Uni" columns="3" titleStyle="boxed" source="Freundeskreis" />
<item type="space" height="10" />
<item type="custom_list" title="Hobbys" source="Hobbys" height="100" optionsStyle="mini" />
</tab>
<tab title="Online">
<item type="email" title="E-Mail 1" source="E-Mail" searchResult="yes" />
<item type="email" title="E-Mail 2" source="EMail_2" />
<item type="email" title="E-Mail 3" source="EMail_3" />
<item type="space" height="10" />
<item type="custom_list" title="Nicknamen" source="Nicknamen" />
<item type="space" height="10" />
<item type="text" title="ICQ-Nummer" source="ICQNummer" />
<item type="text" title="Yahoo Messenger" source="Yahoo_Messenger" />
<item type="text" title="MSN Messenger" source="MSN_Messenger" />
<item type="text" title="Skype" source="Skype" />
<item type="text" title="AIM" source="AIM" />
<item type="space" height="10" />
<item type="link" title="StudiVZ" source="StudiVZ" />
<item type="link" title="Link" source="Link" />
</tab>
<tab title="Ausbildung">
<item type="onechoice" subType="combo" autocomplete="yes" title="Ausbildungstyp" options="unbekannt;Universitätsstudium;Fachhochschulstudium;Berufsausbildung;Sonstiges" free="no" source="Studium" default="unbekannt">
<event onAlways="" action="hide" options="id:1;id:2;id:3" />
<event onDataEquals="Universitätsstudium" action="show" options="id:1" />
<event onDataEquals="Fachhochschulstudium" action="show" options="id:1" />
<event onDataEquals="Berufsausbildung" action="show" options="id:2" />
<event onDataEquals="Sonstiges" action="show" options="id:3" />
</item>
<item type="onechoice" subType="combo" id="1" title="Hochschule" autocomplete="yes" options="unbekannt;Universität Würzburg" free="yes" default="unbekannt" source="Hochschule" />
<item type="onechoice" subType="combo" id="1" title="Fachrichtung" autocomplete="yes" options="unbekannt;Informatik" free="yes" default="unbekannt" source="Fachrichtung" />
<item type="text" id="1" title="Matrikelnummer" source="Matrikelnummer" />
<item type="text" id="2" title="Ausbildungsberuf" source="Ausbildungsberuf" />
<item type="text" id="2" title="Ausbildungsbertrieb" source="Ausbildungsbertrieb" />
<item type="longtext" id="3" heigth="50" title="Ausbildungsdetails" source="Ausbildungsdetails" />
</tab>
<tab title="Arbeit">
<item type="text" title="Berufsbezeichnung" source="Berufsbezeichnung" />
<item type="longtext" title="Firma" source="Firma" />
</tab>
<tab title="Sonstiges">
<item type="longtext" title="Notizen" height="250" source="Notizen" />
<item type="last_changed" title="Letzte Änderung" internalDateFormat="yyyy-MM-dd" externalDateFormat="EEEEEEEEE, dd.MM.yyyy" source="Letzte_Änderung" />
</tab>
</warehouse>
Alles anzeigen
Ein paar Screenshots der auf dieser Basis laufenden Datenbank:
lol.rar2008-25-05_18.04.07.pngUnbenannt.pngSRO_Helper.rar
Neue Datensätze lassen sich hinzufügen und vorhandene verändern und löschen. Es können sogar neue <item>s in der XML-Datei angelegt werden, die dann bei einem Neustart von BMyMind direkt in die Datenbank wandern und für Datensätze zur Verfügung stehen.
Die Suche lässt sich auf bestimmte Felder einschränken und die angezeigten Spalten im Ergebnisfeld über die XML-Datei frei kombinieren.
Bisher sind folgende Typen verfügbar:
address
age
custom_list
date
email
file_link
image
last_changed
link
longtext
multichoice
onechoice
space
text
updown
yesno
Alles anzeigen
Neue Typen lassen sich einfach in Java erstellen dynamisch laden (bisher nur aus dem jar-File, später auch von außerhalb).
Man könnte hiermit z.B. Bücher verwalten, Kontakte, CDs, ... Probiert es aus!
Im Hintergrund läuft eine Derby-Datenbank, die Komponenten entstammen der SwingX-Bibliothek und der Rest ist die zweitschönste Sprache der Welt (nach Finnisch :D): Java!
Ich veröffentliche dieses Programm unter der GPLv3.
Im Anhang einmal eine kompilierte Version und einmal als NetBeans-6.5-Projekt, das die Bibliotheken aus der kompilierten Version benötigt.
Update 0.92:
* Behoben: Sortieren der Suchergebnistabelle führte zu falscher Klickinterpretation
* Neu: Typen "last_changed" und "file_link"
* Neu: style="boxed" und style="titled" (default) für alle bisherigen Typen statt nur für multi_checkbox
Update 0.95:
* Behoben: Einige Bugs
* Neu: Dynamik: Es können abhängig von Eingaben Felder verdeckt oder angezeigt werden.
Update 1.0 Beta 1:
- Verschlüsselung
- Import von CSV-Daten
- Derby statt SQLite
- address (mit Link zu Google Maps)
- Verarbeitung von Typen, die auf mehrere Tabellenspalten lesen und/oder schreiben
- freetext -> longtext
- multichoice und onechoice mit subTypes für die verschiedenen Controls (checkbox, combo, list)
DOWNLOAD
Tests wären sehr willkommen!
peethebee