MoleHillRocker's Blog :: Geeking around since 1985

To content | To menu | To search

Saturday, January 29 2011

XML Schema (XSD) mit dem Paket 'listings' in LaTeX

Da ich in meiner Masterarbeit auch diverse XML Schemata einbinde, habe ich auf Basis der im vorigen Artikel vorgestellten W?DL-Definition eine weitere für XML-Schema erstellt:

\lstdefinelanguage{XSD}{
sensitive=true,
keywords={version, encoding, targetNamespace, elementFormDefault, attributeFormDefault, xmlns:xsd, xmlns:tns, xmlns:xsi, schemaLocation, xsi:noNamespaceSchemaLocation, xsi:schemaLocation, name, type, base, value, minOccurs, maxOccurs, ref, use, default, required, mixed, fixed, itemType, memberTypes, namespace, xpath, refer},
%otherkeywords={=},
alsoletter={<,>,/,?,:},
morestring=[b]{"},
morecomment=[s]{<!--}{-->},
morecomment=[s]{<![CDATA[}{]]>},
keywordstyle=\color{violet},
identifierstyle=\color{teal},
stringstyle=\color{blue},
commentstyle=\color{darkgray}
}

Wednesday, September 15 2010

[Update] WSDL/WADL mit dem Paket 'listings' in LaTeX

Ich schreibe gerade meine Masterarbeit und stand vor dem Problem, WSDL- bzw. WADL-Code in LaTeX einzubetten. Aufgrund der ganzen Namespace-Angaben und Sprachen-spezifischen Attribute funktioniert hierfür nämlich der Befehl \lstset{language=XML} nicht oder nur unzureichend. Nach einigem Suchen stieß ich schließlich auf den Code in diesem Artikel und habe ihn entsprechend meinen Anforderungen angepasst.

Das Ergebnis will ich natürlich niemandem vorenthalten, darum hier nun der Code:

\lstdefinelanguage{W?DL}{
    sensitive=true,
    keywords={name, type, version, encoding, xmlns:soap, xmlns:tns, xmlns:xsd, xmlns:xsd, xmlns:cc, xsi:schemaLocation, xmlns:xsi, xmlns, targetNamespace, message, elementFormDefault, style, transport, soapAction, use, part, binding, location, base, path, status, element, mediaType, required, messageLabel, soap:protocol, soap:mepDefault, ref, address, interface, pattern, id},
    alsoletter={:,<,>,/,?},
    %otherkeywords={=},
    morestring=[b]{"},
    morecomment=[s]{<!--}{-->},
    keywordstyle=\color{violet},
    identifierstyle=\color{teal},
    stringstyle=\color{blue},
    commentstyle=\color{darkgray}
}

Wenn das Zeichen = ebenfalls in der Farbe der Keywords dargestellt werden soll, einfach das Kommentarzeichen % vor otherkeywords={=} entfernen.

Monday, April 26 2010

It's all about Apple!

In letzter Zeit lese ich viiiele Meldungen über das iPad auf heise online und in den Kommentaren finden sich ziemlich häufig einer oder mehrere der folgenden Begriffe (Reihenfolge zufällig):
  • Sekte
  • Fanboy
  • Gängelung
  • verdongelt
  • DRM
  • proprietär
  • Jünger
  • Gott
  • Hohepriester
  • Akolythen
  • Religion
  • Gläubige
  • Lemminge
  • Schwule
  • Heiliger Vater
  • Zensur
  • iWahn
  • iSchrott
  • Ablaßhandel
  • entmündigt
  • iMännchen
  • iProll
  • iPoser
  • iFön
  • EiPott
Zum Schreien! :-D

Friday, April 9 2010

Gemeinsame Nutzung eines Models durch eine JTable und eine JComboBox

In den letzten Tagen stand ich vor dem Problem, Daten in einer JTable und einer JComboBox anzeigen zu lassen. Änderungen in der JTable sollten auf die JComboBox übertragen werden und umgekehrt. Da dies jedoch einigen Aufwand in Bezug auf die Synchronisierung der Daten bedeutet, habe ich mich schließlich entschieden ein Model zu entwickeln das von beiden genutzt werden kann.

Das Model
public class UserObjectsModel implements TableModel, ComboBoxModel, Constants {

private List data;

private List listenerList = new ArrayList();

private int selectedIndex;

private static UserObjectsModel model;

private UserObjectsModel() {
super();
this.data = new ArrayList();
}

@Override
public int getColumnCount() {
return USER_TABLE_COLUMN_NAMES.length;
}

@Override
public int getRowCount() {
if(data == null)
return 0;
return data.size();
}

@Override
public String getColumnName(int col) {
return USER_TABLE_COLUMN_NAMES[col];
}

@Override
public Object getValueAt(int row, int col) {
UserObject userObject = null;
try {
userObject = data.get(row);
}
catch(NullPointerException npe) {
return null;
}
catch(IndexOutOfBoundsException ioobe) {
return null;
}
switch(col) {
case USER_OBJECT_ID:
return userObject.getUserId();
case USER_OBJECT_FIRST_NAME:
return userObject.getFirstName();
case USER_OBJECT_SECOND_NAME:
return userObject.getSecondName();
case USER_OBJECT_STREET_NAME:
return userObject.getStreetName();
case USER_OBJECT_STREET_NUMBER:
return userObject.getStreetNumber();
case USER_OBJECT_ZIPCODE:
return userObject.getZipcode();
case USER_OBJECT_PLACE:
return userObject.getPlace();
default:
return null;
}
}

@Override
public Class getColumnClass(int c) {
Object object = getValueAt(0, c);
if(object == null)
return Object.class;
else
return getValueAt(0, c).getClass();
}

@Override
public boolean isCellEditable(int row, int col) {
return false;
}

@Override
public void setValueAt(Object value, int row, int col) {
UserObject userObject = data.get(row);
switch(col) {
case USER_OBJECT_ID:
userObject.setUserId(((Integer) value).intValue());
case USER_OBJECT_FIRST_NAME:
userObject.setFirstName(value.toString());
case USER_OBJECT_SECOND_NAME:
userObject.setSecondName(value.toString());
case USER_OBJECT_STREET_NAME:
userObject.setStreetName(value.toString());
case USER_OBJECT_STREET_NUMBER:
userObject.setStreetNumber(((Short) value).shortValue());
case USER_OBJECT_ZIPCODE:
userObject.setZipcode(value.toString());
case USER_OBJECT_PLACE:
userObject.setPlace(value.toString());
}
fireTableDataChanged();
}

public void addUserObject(UserObject userObject) {
data.add(userObject);
fireTableDataChanged();
}

public void removeUserObject(int row) {
data.remove(row);
fireTableDataChanged();
}

public void removeUserObject(UserObject userObject) {
data.remove(userObject);
fireTableDataChanged();
}

public void clearUsers() {
data.clear();
fireTableDataChanged();
}

public UserObject getUser(int index) {
return data.get(index);
}

public Vector getUsers() {
return new Vector(data);
}

@Override
public void addTableModelListener(TableModelListener listener) {
listenerList.add(listener);
}

@Override
public void removeTableModelListener(TableModelListener listener) {
listenerList.add(listener);
}

@Override
public Object getSelectedItem() {
if(data.size() > 0)
return data.get(selectedIndex);
else
return null;
}

@Override
public void setSelectedItem(Object item) {
for(int i = 0; i < data.size(); i++) {
if(data.get(i).equals(item))
selectedIndex = i;
}
fireContentsChanged();
}

@Override
public void addListDataListener(ListDataListener listener) {
listenerList.add(listener);
}

@Override
public Object getElementAt(int idx) {
if(idx >= 0 && idx < data.size())
return data.get(idx);
else
return null;
}

@Override
public int getSize() {
return data.size();
}

@Override
public void removeListDataListener(ListDataListener listener) {
listenerList.remove(listener);
}

public void fireTableDataChanged() {
fireTableChanged(new TableModelEvent(this));
}

public void fireTableChanged(TableModelEvent event) {
for(EventListener listener : listenerList) {
if(listener instanceof TableModelListener)
((TableModelListener) listener).tableChanged(event);
}
}

public void fireContentsChanged() {
fireContentsChanged(new ListDataEvent(this, ListDataEvent.CONTENTS_CHANGED,
selectedIndex, selectedIndex));
}

public void fireContentsChanged(ListDataEvent event) {
for(EventListener listener : listenerList) {
if(listener instanceof ListDataListener)
((ListDataListener) listener).contentsChanged(event);
}
}

public static UserObjectsModel getInstance() {
if(model == null)
model = new UserObjectsModel();
return model;
}

}


Klasse UserObject
public class UserObject {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int userId;

@Basic
private String firstName;

@Basic
private String secondName;

@Basic
private String streetName;

@Basic
private short streetNumber;

@Basic
private String zipcode;

@Basic
private String place;

public UserObject() {
super();
}

public UserObject(String firstName, String secondName, String streetName,
short streetNumber, String zipcode, String place) {
super();
this.firstName = firstName;
this.secondName = secondName;
this.streetName = streetName;
this.streetNumber = streetNumber;
this.zipcode = zipcode;
this.place = place;
}

public int getUserId() {
return userId;
}

public void setUserId(int userId) {
this.userId = userId;
}

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getSecondName() {
return secondName;
}

public void setSecondName(String secondName) {
this.secondName = secondName;
}

public String getStreetName() {
return streetName;
}

public void setStreetName(String streetName) {
this.streetName = streetName;
}

public short getStreetNumber() {
return streetNumber;
}

public void setStreetNumber(short streetNumber) {
this.streetNumber = streetNumber;
}

public String getZipcode() {
return zipcode;
}

public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}

public String getPlace() {
return place;
}

public void setPlace(String place) {
this.place = place;
}

public String toString() {
return "UserObject [ " + userId + " " + firstName + " " + secondName + " ]";
}

}


Interface Constants

public interface Constants {

public static final String[] USER_TABLE_COLUMN_NAMES = { "User-ID", "First name",
"Last name", "Street name", "Street number", "Zip code", "Place" };

public static final int USER_OBJECT_ID = 0;

public static final int USER_OBJECT_FIRST_NAME = 1;

public static final int USER_OBJECT_SECOND_NAME = 2;

public static final int USER_OBJECT_STREET_NAME = 3;

public static final int USER_OBJECT_STREET_NUMBER = 4;

public static final int USER_OBJECT_ZIPCODE = 5;

public static final int USER_OBJECT_PLACE = 6;

}

Das Model kann nun durch Aufruf der Methode #setModel(UserObjectsModel.getInstance()) an die JTable/JComboBox gebunden werden.

Wednesday, February 3 2010

Warum ist mein Auto kein Transformer?

Letzte Woche habe ich noch alle ausgelacht, die ihr Auto während der starken Schneefälle hier in Furtwangen im Freien stehen hatten, da ich zu der Zeit 3 Tage im Flachland bei meiner Freundin war. Als ich am Samstag morgen wieder hier an kam, schneite es zwar auch mein Auto zu, aber "nur" mit ca. 30-40cm (im Gegensatz zu anderen mit 70-80cm). Gestern erreichte uns eine Email der Vermieterin, dass wir am kommenden Samstag morgen doch bitte unsere Autos wegstellen mögen, der Hausmeister wolle den Parkplatz bahnen.

Da habe ich noch gegrinst, weil mein Auto schön unter einem Baum stand und nur mit besagter Menge Schnee bedeckt war. Der übermotivierte Sohn des Hausmeisters schob dann einen kleinen Schneewall hinter mein Auto beim Versuch die Straße zu räumen. Man hab' ich mich aufgeregt! Soweit kein Problem, war ja nur ein kleiner Wall.

Heute setzte dann Tauwetter ein und ich dachte "Cool, muss ich nichtmal mehr viel schaufeln!", da von den Seiten schon alles abgefallen war. Als ich beim Abendessen nochmal rausgeschaut habe hat mich dann fast der Schlag getroffen. Zuerst dachte ich mein Auto wäre abgeschleppt worden, weil an seiner Stelle jetzt ein silberner Audi stand. Der komische Schneehaufen daneben fiel mir in dem Moment noch nicht weiter auf... :-S

Bei genauerem Hinsehen erkannte ich dann, dass der komplette Baum sich seiner Schneehaube entledigt hat und diese mein Auto komplett eingedeckt hat. Im Moment schaut nur noch das obere linke Eck der Windschutzscheibe heraus und das Ganze Auto ist in einem riesigen Schneeberg versteckt. Ich mach morgen oder übermorgen mal ein Foto davon, bevor ich mich ans Ausschaufeln mache. 

Edit: Hier nun endlich das Foto:


Wäre mein Auto doch nur ein Transformer, dann würde es sich einfach 2 mal schütteln und gut ist. Aber naja, in Transformers 1 blieb Bumblebee ja auch eine Weile getarnt...vielleicht dauert bei meinem Golf diese Tarnphase einfach nur ein bißchen länger (4 Jahre).

- page 1 of 4