/* * Syncany, www.syncany.org * Copyright (C) 2011-2016 Philipp C. Heckel <philipp.heckel@gmail.com> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.syncany.plugins.transfer.to; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import org.simpleframework.xml.Element; import org.simpleframework.xml.ElementList; import org.simpleframework.xml.Root; import org.simpleframework.xml.Serializer; import org.simpleframework.xml.core.Persister; import org.syncany.chunk.Transformer; /** * The Transaction transfer object exists to serialize a transaction, * which is saved on the remote location and deleted once the transaction is * completed. * * <p>It uses the Simple framework for XML serialization, and its corresponding * annotation-based configuration. * * @see <a href="http://simple.sourceforge.net/">Simple framework</a> at simple.sourceforge.net * @author Pim Otte */ @Root(name = "transaction", strict = false) public class TransactionTO { @Element(name = "machineName") private String machineName; @ElementList(name = "actions", entry = "action") private ArrayList<ActionTO> actionTOs; public TransactionTO() { // Nothing } public TransactionTO(String machineName) { this.machineName = machineName; this.actionTOs = new ArrayList<ActionTO>(); } public String getMachineName() { return machineName; } public List<ActionTO> getActions() { return actionTOs; } public void addAction(ActionTO transactionAction) { actionTOs.add(transactionAction); } public static TransactionTO load(Transformer transformer, File transactionFile) throws Exception { InputStream is; if (transformer == null) { is = new FileInputStream(transactionFile); } else { is = transformer.createInputStream(new FileInputStream(transactionFile)); } return new Persister().read(TransactionTO.class, is); } public void save(Transformer transformer, File transactionFile) throws Exception { PrintWriter out; if (transformer == null) { out = new PrintWriter(new OutputStreamWriter( new FileOutputStream(transactionFile), "UTF-8")); } else { out = new PrintWriter(new OutputStreamWriter( transformer.createOutputStream(new FileOutputStream(transactionFile)), "UTF-8")); } Serializer serializer = new Persister(); serializer.write(this, out); out.flush(); out.close(); } }