package com.wouterbreukink.onedrive.client; import com.google.api.client.util.Throwables; import com.wouterbreukink.onedrive.client.resources.Item; import com.wouterbreukink.onedrive.client.resources.ItemReference; import com.wouterbreukink.onedrive.client.serialization.JsonDateSerializer; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.Date; public interface OneDriveItem { String getId(); boolean isDirectory(); String getName(); String getFullName(); long getCrc32(); long getSize(); Date getCreatedDateTime(); Date getLastModifiedDateTime(); OneDriveItem getParent(); class FACTORY { public static OneDriveItem create(final OneDriveItem parent, final String name, final boolean isDirectory) { return new OneDriveItem() { public String getId() { return null; } public boolean isDirectory() { return isDirectory; } public String getName() { return name; } public String getFullName() { return parent.getFullName() + name + (isDirectory ? "/" : ""); } @Override public long getCrc32() { return 0; } @Override public long getSize() { return 0; } @Override public Date getCreatedDateTime() { return null; } @Override public Date getLastModifiedDateTime() { return null; } @Override public OneDriveItem getParent() { return parent; } }; } public static OneDriveItem create(final Item item) { return new OneDriveItem() { private OneDriveItem parent = create(item.getParentReference()); @Override public String getId() { return item.getId(); } @Override public boolean isDirectory() { return item.getFolder() != null; } @Override public String getName() { return item.getName(); } @Override public String getFullName() { return parent.getFullName() + item.getName() + (isDirectory() ? "/" : ""); } @Override public long getCrc32() { return item.getFile().getHashes().getCrc32(); } @Override public long getSize() { return item.getSize(); } @Override public Date getCreatedDateTime() { return JsonDateSerializer.INSTANCE.deserialize(item.getFileSystemInfo().getCreatedDateTime()); } @Override public Date getLastModifiedDateTime() { return JsonDateSerializer.INSTANCE.deserialize(item.getFileSystemInfo().getLastModifiedDateTime()); } @Override public OneDriveItem getParent() { return parent; } }; } public static OneDriveItem create(final ItemReference parent) { return new OneDriveItem() { @Override public String getId() { return parent.getId(); } @Override public boolean isDirectory() { return true; } @Override public String getName() { return null; } public String getFullName() { if (parent.getPath() == null) { return null; } int index = parent.getPath().indexOf(':'); try { return URLDecoder.decode(index > 0 ? parent.getPath().substring(index + 1) : parent.getPath(), "UTF-8") + "/"; } catch (UnsupportedEncodingException e) { throw Throwables.propagate(e); } } @Override public long getCrc32() { return 0; } @Override public long getSize() { return 0; } @Override public Date getCreatedDateTime() { return null; } @Override public Date getLastModifiedDateTime() { return null; } @Override public OneDriveItem getParent() { return null; } }; } } }