package etienned.lecteuropus; import android.util.Log; import android.util.Xml; import org.xmlpull.v1.XmlSerializer; import java.io.IOException; import java.io.StringWriter; import java.util.ArrayList; import java.util.Calendar; import static etienned.lecteuropus.Utils.bytesToHex; /** * Created by etienned on 10/8/16. */ public class Opus { public static final String TAG = "OPUS"; byte[] m_dataID; byte[] m_dataExp; private byte[][] m_dataTransit; private byte[][] m_dataSubscription; private byte[][] m_dataTicket; private Card m_Card; public Opus(byte[] p_dataID, byte[] p_dataExp, byte[][] p_dataTransit, byte[][] p_dataSubscription, byte[][] p_dataTicket){ m_dataTicket = p_dataTicket; m_dataSubscription = p_dataSubscription; m_dataTransit = p_dataTransit; m_dataID = p_dataID; m_dataExp = p_dataExp; m_Card = new Card(); // Expiration Date int daysExpiration = Utils.bytesToInt(m_dataExp, 45, 14); Calendar ExpirationDate = Utils.intToDateTime(daysExpiration,0); // Card ID long ID = Utils.bytesToInt(m_dataID, 128, 32) & 0x00000000ffffffffL; // Trip ArrayList<Trip> tripList = new ArrayList(); for(int i = 0; i < 3; i++){ try{ Trip tempo = new Trip(p_dataTransit[i]); tripList.add(tempo); } catch (IllegalArgumentException e){ Log.e(TAG, "Empty transit"); } } ArrayList<Contract> contractList = new ArrayList(); // Contracts for(int i = 0; i < 4; i++){ Contract tempo = new Contract(m_dataSubscription[i], m_dataTicket[i]); contractList.add(tempo); } m_Card = new Card(Card.CardType.OPUS, ID, ExpirationDate, tripList, contractList, this.serialize()); } public Card getCard(){ return m_Card; } public String serialize(){ XmlSerializer xmlSerializer = Xml.newSerializer(); StringWriter writer = new StringWriter(); try { xmlSerializer.setOutput(writer); //Start Document xmlSerializer.startDocument("UTF-8", true); //Open Tag <file> xmlSerializer.startTag("", "Opus"); xmlSerializer.startTag("", "ID"); xmlSerializer.text(bytesToHex(m_dataID)); xmlSerializer.endTag("", "ID"); xmlSerializer.startTag("", "Expiration"); xmlSerializer.text(bytesToHex(m_dataExp)); xmlSerializer.endTag("", "Expiration"); xmlSerializer.startTag("", "Transit"); for (int i = 0; i < 3; i++) { xmlSerializer.startTag("", "List"); xmlSerializer.attribute("", "index", Integer.toString(i)); xmlSerializer.text(bytesToHex(m_dataTransit[i])); xmlSerializer.endTag("", "List"); } xmlSerializer.endTag("", "Transit"); xmlSerializer.startTag("", "Subscription"); for (int i = 0; i < 4; i++) { xmlSerializer.startTag("", "List"); xmlSerializer.attribute("", "index", Integer.toString(i)); xmlSerializer.text(bytesToHex(m_dataSubscription[i])); xmlSerializer.endTag("", "List"); } xmlSerializer.endTag("", "Subscription"); xmlSerializer.startTag("", "Ticket"); for (int i = 0; i < 4; i++) { xmlSerializer.startTag("", "List"); xmlSerializer.attribute("", "index", Integer.toString(i)); xmlSerializer.text(bytesToHex(m_dataTicket[i])); xmlSerializer.endTag("", "List"); } xmlSerializer.endTag("", "Ticket"); xmlSerializer.endTag("", "Opus"); xmlSerializer.endDocument(); return writer.toString(); } catch (IOException e){ Log.e("Opus", "Error serialize"); return ""; } } }