package org.dodgybits.shuffle.android.synchronisation.tracks;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Map;
import org.dodgybits.android.shuffle.R;
import org.dodgybits.shuffle.android.core.activity.flurry.Analytics;
import org.dodgybits.shuffle.android.core.model.Context;
import org.dodgybits.shuffle.android.core.model.EntityBuilder;
import org.dodgybits.shuffle.android.core.model.Id;
import org.dodgybits.shuffle.android.core.model.Context.Builder;
import org.dodgybits.shuffle.android.core.model.persistence.EntityPersister;
import org.dodgybits.shuffle.android.core.util.DateUtils;
import org.dodgybits.shuffle.android.synchronisation.tracks.parsing.ContextParser;
import org.dodgybits.shuffle.android.synchronisation.tracks.parsing.Parser;
import org.xmlpull.v1.XmlSerializer;
import android.util.Xml;
/**
* @author Morten Nielsen
*/
public class ContextSynchronizer extends Synchronizer<Context> {
private final String mTracksUrl;
private Parser<Context> mParser;
public ContextSynchronizer(
EntityPersister<Context> persister,
TracksSynchronizer tracksSynchronizer,
WebClient client,
android.content.Context context,
Analytics analytics,
int basePercent,
String tracksUrl) {
super(persister, tracksSynchronizer, client, context, basePercent);
mParser = new ContextParser(analytics);
mTracksUrl = tracksUrl;
}
@Override
protected void verifyEntitiesForSynchronization(Map<Id, Context> localEntities) {
}
@Override
protected String readingRemoteText() {
return mContext.getString(R.string.readingRemoteContexts);
}
@Override
protected String processingText() {
return mContext.getString(R.string.processingContexts);
}
@Override
protected String readingLocalText() {
return mContext.getString(R.string.readingLocalContexts);
}
@Override
protected String stageFinishedText() {
return mContext.getString(R.string.doneWithContexts);
}
@Override
protected EntityBuilder<Context> createBuilder() {
return Context.newBuilder();
}
@Override
protected Context createMergedLocalEntity(Context localContext, Context newContext) {
Builder builder = Context.newBuilder();
builder.mergeFrom(localContext);
builder
.setName(newContext.getName())
.setModifiedDate(newContext.getModifiedDate())
.setDeleted(newContext.isDeleted())
.setTracksId(newContext.getTracksId());
return builder.build();
}
@Override
protected String createDocumentForEntity(Context localContext) {
XmlSerializer serializer = Xml.newSerializer();
StringWriter writer = new StringWriter();
try {
serializer.setOutput(writer);
//serializer.startDocument("UTF-8", true);
String now = DateUtils.formatIso8601Date(System.currentTimeMillis());
serializer.startTag("", "context");
serializer.startTag("", "created-at").attribute("", "type", "datetime").text(now).endTag("", "created-at");
serializer.startTag("", "hide").attribute("", "type", "boolean").text("false").endTag("", "hide");
serializer.startTag("", "name").text(localContext.getName()).endTag("", "name");
serializer.startTag("", "position").attribute("", "type", "integer").text("12").endTag("", "position");
serializer.startTag("", "state").text(localContext.isDeleted() ? "hidden" : "active").endTag("", "state");
serializer.startTag("", "updated-at").attribute("", "type", "datetime").text(now).endTag("", "updated-at");
serializer.endTag("", "context");
// serializer.endDocument();
serializer.flush();
} catch (IOException ignored) {
}
return writer.toString();
}
@Override
protected String createEntityUrl(Context localContext) {
return mTracksUrl + "/contexts/" + localContext.getTracksId().getId() + ".xml";
}
@Override
protected String entityIndexUrl() {
return mTracksUrl+"/contexts.xml";
}
@Override
protected Parser<Context> getEntityParser() {
return mParser;
}
}