package floobits.tests; import com.google.gson.Gson; import floobits.common.interfaces.IFile; import java.io.*; import java.lang.reflect.Type; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MockIFile extends IFile { public class MockNode implements Serializable { public HashMap<String, MockNode> children; public String contents; public Integer size; public MockNode(HashMap<String, MockNode> children, String contents, Integer size) { this.children = children; this.contents = contents; this.size = size; } } public Boolean isValid = true; public Boolean isSpecial = false; public Boolean isSymlink = false; public Boolean isDirectory = false; public String contents; public String path; public HashMap<String, MockNode> children; public Integer length; public static MockNode mockFileFromJSON (String jsonStr) { return new Gson().fromJson(jsonStr, (Type) MockNode.class); } public static MockNode mockFileFromJSON (URL mockFileURL) throws IOException { BufferedReader in = new BufferedReader( new InputStreamReader(mockFileURL.openStream())); String inputLine; StringBuilder b = new StringBuilder(); while ((inputLine = in.readLine()) != null) { b.append(inputLine); } in.close(); return mockFileFromJSON(b.toString()); } public MockIFile (String path) { this.path = path; } public MockIFile (MockNode mn, String path) { if (mn.children != null) { isDirectory = true; children = mn.children; } contents = mn.contents; length = mn.size; this.path = path; } @Override public String getPath() { return path; } @Override public boolean rename(Object obj, String name) { return false; } @Override public boolean move(Object obj, IFile d) { return false; } @Override public boolean delete(Object obj) { return false; } @Override public IFile[] getChildren() { if (children == null) { return new IFile[0]; } List<IFile> files = new ArrayList<IFile>(); for (Map.Entry<String, MockNode> entry : children.entrySet()) { MockNode value = entry.getValue(); String name = entry.getKey(); String filePath = String.format("%s/%s", path, name); files.add(new MockIFile(value, filePath)); } IFile[] result = new IFile[files.size()]; result = files.toArray(result); return result; } @Override public String getName() { if (path.length() < 1) { return ""; } File f = new File(path); return f.getName(); } @Override public long getLength() { if (length != null) { return length; } if (contents != null){ return contents.getBytes().length; } return 100; } @Override public boolean exists() { return false; } @Override public boolean isDirectory() { return isDirectory; } @Override public boolean isSpecial() { return isSpecial; } @Override public boolean isSymLink() { return isSymlink; } @Override public boolean isValid() { return isValid; } @Override public byte[] getBytes() { if (contents == null) { return new byte[0]; } return contents.getBytes(); } @Override public boolean setBytes(byte[] bytes) { return false; } @Override public void refresh() { } @Override public boolean createDirectories(String dir) { return false; } @Override public InputStream getInputStream() { if (contents == null) { return null; } return new ByteArrayInputStream(contents.getBytes()); } }