RSS Feed

Status
Nicht offen für weitere Antworten.
Tolles Forum...keine Antwort. Von wegen hier wird einem geholfen...tZzZZzzZ
:bloed: :bloed: [schild=3 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]www.java-forum.org[/schild] :bloed: :bloed:
 

KSG9|sebastian

Top Contributor
Nun ist echt gut..ich schlag mir 3 Tage mit dir um die Ohren und du schaffst es nicht

1. mal alle Fragen zu beantworten
2. uns ne gescheite (!!) Beschreibung zu geben
3. Eigeninitiative zu zeigen (immer nur dies geht nicht jenes geht nicht, anstatt dich selber hinzusetzen
4. hast du glaub nichtmal den Sinn von RSS wirklich verstanden

Zudem haben wir auch noch andere Aufgaben denen wir nachgehen und sind nicht verpflichtet dir deine Aufgaben zu lösen.
 
Och, jungens...
1. ich hab euch alle Fragen beantwortet.
2. Was für ne Beschreibung wollt ihr denn noch???
3. Ich sitz selbst 3 Tage daran und komm nicht weiter...würde ich weiterkommen, hätte ich sicher nicht im Forum gepostet.
4. Dann hab ich den Sinn halt noch nicht verstanden, aber ich würde ihn gern verstehen wollen und mit einem(!) laufendem Programm wäre das sicher auch nen Tick einfacher für mich.

Ich habe die Methoden überschrieben und meine Elemente auch reingepackt, aber beim Ausführen werden die nicht mit angezeigt...
Über ein Code-Beispiel, welches auch läuft, wäre ich sehr dankbar. Dann könnte ich nämlich auch das Prinzip verstehen...

Erwartest du etwa, dass jeder Forenuser schon die Antworten auf seine Fragen weiss, die er stellt??
 

KSG9|sebastian

Top Contributor
Du musst

1) Die Klasse SyndBean und SyndEntry (heißen glaub so) überschreiben und getter bzw. setter für eine eigenen Werte einbauen
2) Die Klasse überschreiben welche aus der XML-Datei ein Java-Objekt generiert. Dort musst du sämtliche "normalen" Felder einlesen und DAZU die eigenen Elemente wie z.B. <img>abc.jpg</img>
3) Die Klasse überschreiben welche aus einem Java-Objekt eine XML-Datei generiert. Dort musst du wiederum sämtliche "normalen" Elemente rausschreiben und deine eigenen, z.B. so Element e = new Element("img");e.setText(syndEntry.getImg());

Viel mehr gibts dazu nicht zu sagen, zumindest nicht ohne deinen Code...den du ja wohl mittlerweile geschrieben hast...
 
Ich danke dir, Sebastian. Ich werde das jetzt versuchen umzusetzen und bei Problemen dann natürlich meinen Code mitposten.
Du meinst aber sicherlich die Klassen SyndFeed und SyndEntry, die ich überschreiben muss, oder? Eine SyndBean-Klasse gibt es nicht...
 
Ich habe jetzt die Klassen zum "Reinschreiben" soweit überschrieben:

SyndEntryNewElement:
Code:
public class SyndEntryNewElement extends SyndEntryImpl
{
	private String _height;
	private String _width;
	private String _picURL;
    private ObjectBean _objBean;
    private String _uri;
    private String _title;
    private String _link;
    private Date _updatedDate;
    private SyndContent _summary;    
    private SyndContent _description;
    private List _links;
    private List _contents; // deprecated by Atom 1.0
    private List _modules;
    private List _enclosures;
    private List _authors;
    private List _contributors;
	
	public List getAuthors() {
		return _authors;
	}
	public void setAuthors(List _authors) {
		this._authors = _authors;
	}
	public List getContents() {
		return _contents;
	}
	public void setContents(List _contents) {
		this._contents = _contents;
	}
	public List getContributors() {
		return _contributors;
	}
	public void setContributors(List _contributors) {
		this._contributors = _contributors;
	}
	public SyndContent getDescription() {
		return _description;
	}
	public void setDescription(SyndContent _description) {
		this._description = _description;
	}
	public List getEnclosures() {
		return _enclosures;
	}
	public void setEnclosures(List _enclosures) {
		this._enclosures = _enclosures;
	}
	public String getLink() {
		return _link;
	}
	public void setLink(String _link) {
		this._link = _link;
	}
	public List getLinks() {
		return _links;
	}
	public void setLinks(List _links) {
		this._links = _links;
	}
	public List getModules() {
		return _modules;
	}
	public void setModules(List _modules) {
		this._modules = _modules;
	}
	public ObjectBean getObjBean() {
		return _objBean;
	}
	public void setObjBean(ObjectBean bean) {
		_objBean = bean;
	}
	public SyndContent getSummary() {
		return _summary;
	}
	public void setSummary(SyndContent _summary) {
		this._summary = _summary;
	}
	public String getTitle() {
		return _title;
	}
	public void setTitle(String _title) {
		this._title = _title;
	}
	public Date getUpdatedDate() {
		return _updatedDate;
	}
	public void setUpdatedDate(Date date) {
		_updatedDate = date;
	}
	public String getUri() {
		return _uri;
	}
	public void setUri(String _uri) {
		this._uri = _uri;
	}

	public String getHeight() 
	{
		return _height;
	}
	public void setHeight(String height) 
	{
		_height = height;
	}
	public String getPicURL() 
	{
		return _picURL;
	}
	public void setPicURL(String picURL) 
	{
		_picURL = picURL;
	}
	public String getWidth()
	{
		return _width;
	}
	public void setWidth(String width)
	{
		_width = width;
	}	
}

SyndFeedNewElement:

Code:
public class SyndFeedNewElement extends SyndFeedImpl
{
    private ObjectBean _objBean;
    
    private String    _encoding;
    private String    _uri;
    private String    _title;
    private String    _feedType;
    private String    _link;
    private String 	  _height;
    private String    _width;
    private String    _picURL;		
    private List      _links;
    private String    _description;
    private SyndImage _image;
    private List      _entries;
    private List      _modules;
    private List      _authors;
    private List      _contributors; 
    
    private static final Converters CONVERTERS = new Converters();
	
	public String getHeight()
	{
		return _height;
	}
	public void setHeight(String height)
	{
		_height = height;
	}
	public String getPicURL()
	{
		return _picURL;
	}
	public void setPicURL(String picURL)
	{
		_picURL = picURL;
	}
	public String getWidth()
	{
		return _width;
	}
	public void setWidth(String width)
	{
		_width = width;
	}
	
    public WireFeed createWireFeed() {
        return createWireFeed(_feedType);
    }

    public WireFeed createWireFeed(String feedType) {
        if (feedType==null) {
            throw new IllegalArgumentException("Feed type cannot be null");
        }
        Converter converter = CONVERTERS.getConverter(feedType);
        if (converter==null) {
            throw new IllegalArgumentException("Invalid feed type ["+feedType+"]");
        }
        return converter.createRealFeed(this);
    }
    
	public static Converters getCONVERTERS()
	{
		return CONVERTERS;
	}
	
	public List getAuthors()
	{
		return _authors;
	}
	public void setAuthors(List _authors)
	{
		this._authors = _authors;
	}
	public List getContributors()
	{
		return _contributors;
	}
	
	public void setContributors(List _contributors)
	{
		this._contributors = _contributors;
	}
	
	public String getDescription()
	{
		return _description;
	}
	
	public void setDescription(String _description)
	{
		this._description = _description;
	}
	
	public String getEncoding()
	{
		return _encoding;
	}
	
	public void setEncoding(String _encoding)
	{
		this._encoding = _encoding;
	}
	
	public List getEntries()
	{
		return _entries;
	}
	public void setEntries(List _entries)
	{
		this._entries = _entries;
	}
	
	public String getFeedType()
	{
		return _feedType;
	}
	
	public void setFeedType(String type)
	{
		_feedType = type;
	}
	
	public SyndImage getImage()
	{
		return _image;
	}
	
	public void setImage(SyndImage _image)
	{
		this._image = _image;
	}
	
	public String getLink()
	{
		return _link;
	}
	
	public void setLink(String _link)
	{
		this._link = _link;
	}
	
	public List getLinks()
	{
		return _links;
	}
	
	public void setLinks(List _links)
	{
		this._links = _links;
	}
	
	public List getModules()
	{
		return _modules;
	}
	
	public void setModules(List _modules)
	{
		this._modules = _modules;
	}
	
	public ObjectBean getObjBean()
	{
		return _objBean;
	}
	
	public void setObjBean(ObjectBean bean)
	{
		_objBean = bean;
	}
	
	public String getTitle()
	{
		return _title;
	}
	
	public void setTitle(String _title)
	{
		this._title = _title;
	}
	
	public String getUri()
	{
		return _uri;
	}
	
	public void setUri(String _uri)
	{
		this._uri = _uri;
	}	
}

Und meine main-Klasse CreateAndWriteOwnFeed:

Code:
public class CreateAndWriteOwnFeed
{
	public static void main(String[] args) throws Throwable
	  {
	    SyndFeedNewElement feed = new SyndFeedNewElement();
	    DateFormat dateParser = new SimpleDateFormat("yyyy-MM-dd");
	    feed.setFeedType("rss_1.0");

	    feed.setTitle("Sample Feed (created with ROME)");
	    feed.setLink("http://rome.dev.java.net");
	    feed.setDescription("This feed has been created using ROME (Java syndication utilities");
	    feed.setHeight("Height");
	    
	    List entries = new ArrayList();
	    SyndEntryNewElement entry;
	    SyndContent description;

	    entry = new SyndEntryNewElement();
	    entry.setTitle("ROME v1.0");
	    entry.setLink("http://wiki.java.net/bin/view/Javawsxml/Rome01");
	    entry.setHeight("Height");
	    description = new SyndContentImpl();
	    description.setType("text/plain");
	    description.setValue("Initial release of ROME");
	    entry.setDescription(description);
	    entries.add(entry);
	    
	    feed.setEntries(entries);

	    SyndFeedOutputNewElement output = new SyndFeedOutputNewElement();
	    StringWriter s = new StringWriter();
	    output.output(feed,s);
	    
	    System.out.println(s.getBuffer());
	  }
}

So, wenn ich das jetzt ausführe und ich mir die List entries anzeigen lassen möchte, kommt folgende Augabe:

[SyndEntryNewElement.updatedDate=null
SyndEntryNewElement.contributors=null
SyndEntryNewElement.title=ROME v1.0
SyndEntryNewElement.categories=[]
SyndEntryNewElement.link=http://wiki.java.net/bin/view/Javawsxml/Rome01

EXCEPTION: Could not complete class _rssFeed.SyndEntryNewElement.toString(): null
]

Warum wird das auf einmal unterbrochen und es kommt so eine komische Exception? Warum zeigt er mir nen Fehler mit toString() an, obwohl ich das gar nicht benutz?
 

KSG9|sebastian

Top Contributor
mach mal folgendes:

Code:
public static void main(String[] args)
     { 
     try{
       SyndFeedNewElement feed = new SyndFeedNewElement(); 
       DateFormat dateParser = new SimpleDateFormat("yyyy-MM-dd"); 
       feed.setFeedType("rss_1.0"); 

       feed.setTitle("Sample Feed (created with ROME)"); 
       feed.setLink("http://rome.dev.java.net"); 
       feed.setDescription("This feed has been created using ROME (Java syndication utilities"); 
       feed.setHeight("Height"); 
       
       List entries = new ArrayList(); 
       SyndEntryNewElement entry; 
       SyndContent description; 

       entry = new SyndEntryNewElement(); 
       entry.setTitle("ROME v1.0"); 
       entry.setLink("http://wiki.java.net/bin/view/Javawsxml/Rome01"); 
       entry.setHeight("Height"); 
       description = new SyndContentImpl(); 
       description.setType("text/plain"); 
       description.setValue("Initial release of ROME"); 
       entry.setDescription(description); 
       entries.add(entry); 
       
       feed.setEntries(entries); 

       SyndFeedOutputNewElement output = new SyndFeedOutputNewElement(); 
       StringWriter s = new StringWriter(); 
       output.output(feed,s); 
       
       System.out.println(s.getBuffer()); 
     } catch(Exception ex){
         ex.printStackTrace();
     }
}

Und poste den ganzen Stacktrace, da ist sicher ein Hinweis wo der Fehler liegt.

P.S.: Guck, mit ein bisschen Eigeninitiative kommst du schon recht weit, oder? Und dann hat sicher auch keiner n Problem damit dir bei deinen Problemen zu helfen.

Gruß Sebastian
 
Also...ich bin die letzte Stunde richtig gut voran gekommen. Ich habe jetzt alles in dem Objekt WireFeed stehen, was ich brauche. Jetzt muss nur noch die Ausgabe klappen.
Meine SyndFeedOutputNewElement-Klasse:
Code:
public class SyndFeedOutputNewElement extends SyndFeedOutput
{
    private WireFeedOutput _feedOutput;

    public void output(SyndFeedNewElement feed,Writer writer) throws IOException, FeedException
    {
    	_feedOutput = new WireFeedOutput();
    	_feedOutput.output(feed.createWireFeed(),writer);
    }
}

und die output-Methode in der WireFeedOutput-Klasse:
Code:
    public void output(WireFeed feed,Writer writer) throws IllegalArgumentException,IOException, FeedException {
    	Document doc = outputJDom(feed);
        String encoding = feed.getEncoding();
        Format format = Format.getPrettyFormat();
        if (encoding!=null) {
            format.setEncoding(encoding);
        }
        XMLOutputter outputter = new XMLOutputter(format);
        outputter.output(doc,writer);
    }

in der Variable feed steht folgendes:

Code:
Channel.ttl=-1
Channel.title=Sample Feed (created with ROME)
Channel.categories=[]
Channel.rating=null
Channel.modules=[]
Channel.textInput=null
Channel.encoding=null
Channel.managingEditor=null
Channel.height=Height
Channel.docs=null
Channel.items[0].comments=null
Channel.items[0].title=ROME v1.0
Channel.items[0].categories=[]
Channel.items[0].link=http://wiki.java.net/bin/view/Javawsxml/Rome01
Channel.items[0].pubDate=null
Channel.items[0].modules[0].descriptions=[]
Channel.items[0].modules[0].creators=[]
Channel.items[0].modules[0].contributors=[]
Channel.items[0].modules[0].title=null
Channel.items[0].modules[0].relations=[]
Channel.items[0].modules[0].publisher=null
Channel.items[0].modules[0].date=null
Channel.items[0].modules[0].languages=[]
Channel.items[0].modules[0].titles=[]
Channel.items[0].modules[0].rightsList=[]
Channel.items[0].modules[0].interface=interface com.sun.syndication.feed.module.DCModule
Channel.items[0].modules[0].subjects=[]
Channel.items[0].modules[0].contributor=null
Channel.items[0].modules[0].sources=[]
Channel.items[0].modules[0].types=[]
Channel.items[0].modules[0].type=null
Channel.items[0].modules[0].rights=null
Channel.items[0].modules[0].publishers=[]
Channel.items[0].modules[0].formats=[]
Channel.items[0].modules[0].dates=[]
Channel.items[0].modules[0].language=null
Channel.items[0].modules[0].identifiers=[]
Channel.items[0].modules[0].creator=null
Channel.items[0].modules[0].coverage=null
Channel.items[0].modules[0].uri=http://purl.org/dc/elements/1.1/
Channel.items[0].modules[0].description=null
Channel.items[0].modules[0].identifier=null
Channel.items[0].modules[0].subject=null
Channel.items[0].modules[0].relation=null
Channel.items[0].modules[0].source=null
Channel.items[0].modules[0].format=null
Channel.items[0].modules[0].coverages=[]
Channel.items[0].enclosures=[]
Channel.items[0].uri=null
Channel.items[0].description.value=Initial release of ROME
Channel.items[0].description.type=text/plain
Channel.items[0].guid=null
Channel.items[0].source=null
Channel.items[0].expirationDate=null
Channel.items[0].author=null
Channel.image=null
Channel.copyright=null
Channel.webMaster=null
Channel.pubDate=null
Channel.link=http://rome.dev.java.net
Channel.skipDays=[]
Channel.cloud=null
Channel.language=null
Channel.skipHours=[]
Channel.feedType=rss_1.0
Channel.uri=http://rome.dev.java.net
Channel.lastBuildDate=null
Channel.description=This feed has been created using ROME (Java syndication utilities
Channel.generator=null
Die Höhe (height) ist also schon mit drin. Nur ausgeben wird das in dem XML-Baum noch nicht...da weiss ich noch nicht ganz woran es liegt..Vielleicht findest du ja was?
 
Ich hab jetzt deine main-Mehtode genommer, hab das leider erst nach meinem Post entdeckt. Ich erhalte da einen XML-Baum..keinen Stacktrace...es liegt ja kein Fehler vor, es werden bis jetzt die neuen Elemente nicht mit in die Ausgabe einbezogen, da fehlt noch irgendwas.
Ich weiss schon, dass ich so mehr erreichen kann. Aber ich war einfach zu "neu" in dem Thema um euch viel darüber sagen zu können und hab überhaupt nicht durchgeblickt.
 

KSG9|sebastian

Top Contributor
Du musst einen eigenen ModulGenerator schreiben:

Hier ein Beispiel aus dem Tutorial wie das funktioniert:

Code:
public class SampleModuleGenerator  implements ModuleGenerator {
    private static final Namespace SAMPLE_NS  = Namespace.getNamespace("sample", SampleModule.URI);

    public String getNamespaceUri() {
        return SampleModule.URI;
    }

    private static final Set NAMESPACES;

    static {
        Set nss = new HashSet();
        nss.add(SAMPLE_NS);
        NAMESPACES = Collections.unmodifiableSet(nss);
    }

    public Set getNamespaces() {
        return NAMESPACES;
    }

    public void generate(Module module, Element element) {

        // this is not necessary, it is done to avoid the namespace definition in every item.
        Element root = element;
        while (root.getParent()!=null && root.getParent() instanceof Element) {
            root = (Element) element.getParent();
        }
        root.addNamespaceDeclaration(SAMPLE_NS);

        SampleModuleI fm = (SampleModule)module;
        if (fm.getBar() != null) {
            element.addContent(generateSimpleElement("bar", fm.getBar()));
        }
        List foos = fm.getFoos();
        for (int i = 0; i < foos.size(); i++) {
            element.addContent(generateSimpleElement("foo",foos.get(i).toString()));
        }
        if (fm.getDate() != null) {
            element.addContent(generateSimpleElement("date", DateParser.formatW3CDateTime(fm.getDate())));
        }
    }

    protected Element generateSimpleElement(String name, String value)  {
        Element element = new Element(name, SAMPLE_NS);
        element.addContent(value);
        return element;
    }

}

Und dann noch deinen eigenen Generator bei Rome anmelden
rome.properties (muss in den Classpath)
Code:
# Parsers for RSS 1.0 feed modules
#
rss_1.0.feed.ModuleParser.classes=com.sun.syndication.samples.module.SampleModuleParser

# Parsers for RSS 1.0 item modules
#
rss_1.0.item.ModuleParser.classes=com.sun.syndication.samples.module.SampleModuleParser

# Generators for RSS 1.0 feed modules
#
rss_1.0.feed.ModuleGenerator.classes=com.sun.syndication.samples.module.SampleModuleGenerator

# Generators for RSS_1.0 entry modules
#
rss_1.0.item.ModuleGenerator.classes=com.sun.syndication.samples.module.SampleModuleGenerator

Natürlich nur die Module eintragen welche du auch hast...
 
Ich hab aber kein Module angelegt...ich hab das folgendermaßen gemacht:
Meine Klasse SyndFeedNewElement erbt von SyndFeedImpl und beinhaltet das neue Element "height" mit den get- und set-Methoden. Dann habe ich die entsprechenden Methoden umgeschrieben und das height-Element mit einbezogen. Jetzt steht das in der Variable feed in WireFeedOutput das aus meinem letzten Post drin. Also das:

Code:
Channel.ttl=-1
Channel.title=Sample Feed (created with ROME)
Channel.categories=[]
Channel.rating=null
Channel.modules=[]
Channel.textInput=null
Channel.encoding=null
Channel.managingEditor=null
Channel.height=Height
Channel.docs=null
Channel.items[0].comments=null
Channel.items[0].title=ROME v1.0
Channel.items[0].categories=[]
Channel.items[0].link=http://wiki.java.net/bin/view/Javawsxml/Rome01
Channel.items[0].pubDate=null
Channel.items[0].modules[0].descriptions=[]
Channel.items[0].modules[0].creators=[]
Channel.items[0].modules[0].contributors=[]
Channel.items[0].modules[0].title=null
Channel.items[0].modules[0].relations=[]
Channel.items[0].modules[0].publisher=null
Channel.items[0].modules[0].date=null
Channel.items[0].modules[0].languages=[]
Channel.items[0].modules[0].titles=[]
Channel.items[0].modules[0].rightsList=[]
Channel.items[0].modules[0].interface=interface com.sun.syndication.feed.module.DCModule
Channel.items[0].modules[0].subjects=[]
Channel.items[0].modules[0].contributor=null
Channel.items[0].modules[0].sources=[]
Channel.items[0].modules[0].types=[]
Channel.items[0].modules[0].type=null
Channel.items[0].modules[0].rights=null
Channel.items[0].modules[0].publishers=[]
Channel.items[0].modules[0].formats=[]
Channel.items[0].modules[0].dates=[]
Channel.items[0].modules[0].language=null
Channel.items[0].modules[0].identifiers=[]
Channel.items[0].modules[0].creator=null
Channel.items[0].modules[0].coverage=null
Channel.items[0].modules[0].uri=http://purl.org/dc/elements/1.1/
Channel.items[0].modules[0].description=null
Channel.items[0].modules[0].identifier=null
Channel.items[0].modules[0].subject=null
Channel.items[0].modules[0].relation=null
Channel.items[0].modules[0].source=null
Channel.items[0].modules[0].format=null
Channel.items[0].modules[0].coverages=[]
Channel.items[0].enclosures=[]
Channel.items[0].uri=null
Channel.items[0].description.value=Initial release of ROME
Channel.items[0].description.type=text/plain
Channel.items[0].guid=null
Channel.items[0].source=null
Channel.items[0].expirationDate=null
Channel.items[0].author=null
Channel.image=null
Channel.copyright=null
Channel.webMaster=null
Channel.pubDate=null
Channel.link=http://rome.dev.java.net
Channel.skipDays=[]
Channel.cloud=null
Channel.language=null
Channel.skipHours=[]
Channel.feedType=rss_1.0
Channel.uri=http://rome.dev.java.net
Channel.lastBuildDate=null
Channel.description=This feed has been created using ROME (Java syndication utilities
Channel.generator=null
Und die Methode output von WireFeedGenerator wird auch aufgerufen. Scheint also nicht die falsche zu sein. Und der XMLOutputter übernimmt dann die Ausgabe mit der Methode output. Allerdings wird darin das neue Element nicht berücksichtigt, also muss ich doch diese überschreiben, oder?
 

KSG9|sebastian

Top Contributor
wenn du nen WiredFeed und nen Writer übergibst wird doch die Methode outputJDom verwendet ?! Und die holt sich wiederum einen Generator. Ansonsten die output-Methode überschreiben
 
Ja, richtig..die output-Methode ruft die outputJDom auf. Die hab ich auch schon bearbeitet. Ich habs geschafft, in den XML-Baum die feed-Elemente einzubauen. *freu*
Jetzt muss ich allerdings mal schauen, wie ich die item-Elemente noch mit reinschreiben kann! Ich hoffe, das klappt auch dann gleich. Muss heute damit fertig werden :-/
 
Oh...das wird dann doch nicht so gehen, wie ich dachte. Wie kann ich den items einfügen? Da muss ich doch über die setModules_Methode neue Module hinzufügen, oder?
 
G

Guest

Gast
Ich habe meinen Feed nun so hinbekommen, wie ich es wollte. Allerdings nicht mit dem Schreiben neuer Klassen und überschreiben von Methoden, sondern nur über das direkte einfügen von den Elementen in den Rome-Code.

Ich versuche gerade, den Rome-Code unangetastet zu lassen und nur die Methoden etc. zu überschreiben. Aber das ist quasi unmöglich...Hast du dir das mal angeguckt?
Das ist so in sich verschachtelt, dass es nicht möglich ist, dass per Überschreiben zu machen. So, wie du es mir jedenfalls gesagt hattest, geht es nicht...
Und das Tutorial gibt mir auch keinen weiteren Aufschluss darüber!
 
G

Gast

Gast
Kann mir denn keiner bei dem Überschreiben der Klassen helfen? Ich pack das nicht, aber ich brauch das dringend bis morgen! Da gibts sicher ne ganz einfache Methode. Ich hab aber keine Idee, wie das gehen soll. In dem Beispiel auf der ROME-Seite sind 4 Klassen geschrieben wurden und angeblich soll das funktionieren, dass tut es aber nicht!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben