001    ///////////////////////////////////////////////////////////////////////////////
002    // Copyright (c) 2006, Frank S. Nestel, All Rights Reserved.
003    //
004    // This library is free software; you can redistribute it and/or
005    // modify it under the terms of the GNU Lesser General Public
006    // License as published by the Free Software Foundation; either
007    // version 2.1 of the License, or (at your option) any later version.
008    //
009    // This library is distributed in the hope that it will be useful,
010    // but WITHOUT ANY WARRANTY; without even the implied warranty of
011    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
012    // GNU General Public License for more details.
013    //
014    // You should have received a copy of the GNU Lesser General Public
015    // License along with this program; if not, write to the Free Software
016    // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
017    ///////////////////////////////////////////////////////////////////////////////
018    
019    package de.spieleck.app.turn.rendering;
020    
021    import java.io.IOException;
022    import java.io.File;
023    import java.io.FileOutputStream;
024    
025    import com.thoughtworks.xstream.XStream;
026    import com.thoughtworks.xstream.io.xml.DomDriver;
027    import com.thoughtworks.xstream.converters.Converter; 
028    import com.thoughtworks.xstream.converters.MarshallingContext; 
029    import com.thoughtworks.xstream.converters.UnmarshallingContext; 
030    import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
031    import com.thoughtworks.xstream.io.HierarchicalStreamReader;
032    
033    import de.spieleck.app.turn.scoring.Mue.MueScore;
034    import de.spieleck.app.turn.scoring.Zoff.ZoffScore;
035    import de.spieleck.app.turn.scoring.Chess.ChessScore;
036    import de.spieleck.app.turn.Player;
037    import de.spieleck.app.turn.PlayerRegistry;
038    import de.spieleck.app.turn.pairing.GameImpl;
039    import de.spieleck.app.turn.GameResult;
040    import de.spieleck.app.turn.ScoringMode;
041    
042    /**
043     * A facade to the XStream library.
044     *
045     * <p><a href="$URL: https://svn.sourceforge.net/svnroot/jtourney/src/de/spieleck/app/turn/rendering/XStreamBuilder.java $">$URL: https://svn.sourceforge.net/svnroot/jtourney/src/de/spieleck/app/turn/rendering/XStreamBuilder.java $</a></p>
046     *
047     * @author Frank S. Nestel
048     * @author $Author: nestefan $
049     * @version $Revision: 2 $ $Date: 2006-03-20 14:33:27 +0100 (Mo, 20 Mrz 2006) $ $Author: nestefan $
050     */
051    public class XStreamBuilder
052    {
053        public final static XStream XSTREAM;
054    
055        static
056        {
057            XSTREAM = new XStream(new DomDriver());
058            a("player", Player.class);
059            // a("game", Game.class);
060            a("game", GameImpl.class);
061            a("gameresult", GameResult.class);
062            a("mue-score", MueScore.class);
063            a("zoff-score", ZoffScore.class);
064            a("chess-score", ChessScore.class);
065            // XSTREAM.omitField(Player.class, "id");
066            XSTREAM.omitField(MueScore.class, "outer-class");
067            XSTREAM.omitField(MueScore.class, "outer.class");
068            XSTREAM.omitField(Player.class, "registry");
069            XSTREAM.omitField(Player.class, "gameResults");
070            XSTREAM.omitField(Player.class, "opponents");
071            // Tut so noch nix!!
072            XSTREAM.registerConverter(new Converter()
073                    {
074                        public boolean canConvert(Class clazz)
075                        {
076    // System.out.println("++"+clazz);
077                            return clazz == Integer.TYPE;
078                        }
079    
080                        public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context)
081                        {
082    // System.out.println("--"+source);
083                        }
084    
085                        public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context)
086                        {
087                            return null;
088                        }
089    
090                        
091                    }
092                );
093        }
094    
095        private final static void a(String n, Class clazz)
096        {
097            XSTREAM.alias(n, clazz);
098        }
099    
100        public static XStream getXStream()
101        {
102            return XSTREAM;
103        }
104    
105        public static void toXML(Object o, File fi)
106            throws IOException
107        {
108            XSTREAM.toXML(o, new FileOutputStream(fi));
109        }
110    
111        public static void main(String[] args)
112        {
113            String xml;
114            ScoringMode sm = new de.spieleck.app.turn.scoring.Mue();
115            PlayerRegistry pr = new Player.StandardPlayerRegistry(sm);
116            Player p = pr.registerPlayer("shortName", "name", "remark");
117            xml = XSTREAM.toXML(p);
118            System.out.println(xml);
119        }
120    
121    }