package org.webinos.android.impl.mediacontent; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import org.webinos.api.mediacontent.MediaImage; import org.webinos.api.mediacontent.MediaItem; import android.provider.MediaStore; interface Translator { Object getDbValue(Object attribValue); Object getAttribValue(Object dbValue); // Assumes one-to-one mapping static class MappingTranslator implements Translator { protected Map<Object, Object> mapping = new HashMap<Object, Object>(); protected Object defaultValue; @Override public Object getDbValue(Object attribValue) { return mapping.containsKey(attribValue) ? mapping.get(attribValue) : getDbValue(defaultValue); } @Override public Object getAttribValue(Object dbValue) { for (Entry<Object, Object> entry : mapping.entrySet()) { Object val = entry.getValue(); if (val.equals(dbValue)) { return entry.getKey(); } } return defaultValue; } } static class OrientationTranslator extends MappingTranslator { public OrientationTranslator() { mapping.put(MediaImage.ORIENTATION_NORMAL, 0L); mapping.put(MediaImage.ORIENTATION_ROTATE_90, 90L); mapping.put(MediaImage.ORIENTATION_ROTATE_180, 180L); mapping.put(MediaImage.ORIENTATION_ROTATE_270, 270L); defaultValue = MediaImage.ORIENTATION_NORMAL; } } static class MediaTypeTranslator extends MappingTranslator { public MediaTypeTranslator() { mapping.put(MediaItem.MEDIATYPE_IMAGE, Long.valueOf(MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE)); mapping.put(MediaItem.MEDIATYPE_VIDEO, Long.valueOf(MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO)); mapping.put(MediaItem.MEDIATYPE_AUDIO, Long.valueOf(MediaStore.Files.FileColumns.MEDIA_TYPE_AUDIO)); mapping.put(MediaItem.MEDIATYPE_UNKNOWN, Long.valueOf(MediaStore.Files.FileColumns.MEDIA_TYPE_NONE)); defaultValue = MediaItem.MEDIATYPE_UNKNOWN; } } static class DateTranslator implements Translator { private int factor = 1000; public DateTranslator() { } public DateTranslator(int factor) { this.factor = factor; } @Override public Object getDbValue(Object attribValue) { return attribValue != null ? ((Date)attribValue).getTime() / factor : null; } @Override public Object getAttribValue(Object dbValue) { return dbValue != null ? new Date((Long)dbValue * factor) : null; } } public static class ToStringArrayTranslator implements Translator { @Override public Object getDbValue(Object attribValue) { return ((String[])attribValue)[0]; } @Override public Object getAttribValue(Object dbValue) { return new String[] {dbValue != null ? dbValue.toString() : null}; } } static class ToStringTranslator implements Translator { @Override public Object getDbValue(Object attribValue) { return attribValue != null ? String.valueOf(attribValue) : null; } @Override public Object getAttribValue(Object dbValue) { return dbValue != null ? dbValue.toString() : null; } } }