root / web_client / src / gr / grnet / pithos / web / client / foldertree / Folder.java @ 0bc032bf
History | View | Annotate | Download (5.2 kB)
1 | 9e8e14e4 | Christos Stathis | /*
|
---|---|---|---|
2 | 9e8e14e4 | Christos Stathis | * Copyright (c) 2011 Greek Research and Technology Network
|
3 | 9e8e14e4 | Christos Stathis | */
|
4 | 9e8e14e4 | Christos Stathis | |
5 | 9e8e14e4 | Christos Stathis | package gr.grnet.pithos.web.client.foldertree; |
6 | 9e8e14e4 | Christos Stathis | |
7 | 5cd18037 | Christos Stathis | import com.google.gwt.http.client.Response; |
8 | 5cd18037 | Christos Stathis | import com.google.gwt.i18n.client.DateTimeFormat; |
9 | 5cd18037 | Christos Stathis | import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat; |
10 | 5cd18037 | Christos Stathis | import com.google.gwt.json.client.JSONArray; |
11 | 5cd18037 | Christos Stathis | import com.google.gwt.json.client.JSONObject; |
12 | 5cd18037 | Christos Stathis | import com.google.gwt.json.client.JSONParser; |
13 | 5cd18037 | Christos Stathis | import com.google.gwt.json.client.JSONValue; |
14 | fbff60ff | Christos Stathis | import java.util.ArrayList; |
15 | 5cd18037 | Christos Stathis | import java.util.Date; |
16 | 5cd18037 | Christos Stathis | import java.util.LinkedHashSet; |
17 | fbff60ff | Christos Stathis | import java.util.List; |
18 | 5cd18037 | Christos Stathis | import java.util.Set; |
19 | 9e8e14e4 | Christos Stathis | |
20 | 5cd18037 | Christos Stathis | public class Folder extends Resource { |
21 | 1ac430a1 | Christos Stathis | /*
|
22 | 1ac430a1 | Christos Stathis | * The name of the folder. If the folder is a container this is its name. If it is a virtual folder this is the
|
23 | 1ac430a1 | Christos Stathis | * last part of its path
|
24 | 1ac430a1 | Christos Stathis | */
|
25 | 5cd18037 | Christos Stathis | private String name = null; |
26 | 9e8e14e4 | Christos Stathis | |
27 | 5cd18037 | Christos Stathis | private Date lastModified = null; |
28 | 9e8e14e4 | Christos Stathis | |
29 | 5cd18037 | Christos Stathis | private long bytesUsed = 0; |
30 | 5cd18037 | Christos Stathis | |
31 | 5cd18037 | Christos Stathis | private Set<Folder> subfolders = new LinkedHashSet<Folder>(); |
32 | 1ac430a1 | Christos Stathis | /*
|
33 | 1ac430a1 | Christos Stathis | * The name of the container that this folder belongs to. If this folder is container, this field equals name
|
34 | 1ac430a1 | Christos Stathis | */
|
35 | 5cd18037 | Christos Stathis | private String container = null; |
36 | 5cd18037 | Christos Stathis | |
37 | 1ac430a1 | Christos Stathis | /*
|
38 | 1ac430a1 | Christos Stathis | * This is the full path of the folder (prefix is a misnomer but it was named so because this is used as a prefix=
|
39 | 1ac430a1 | Christos Stathis | * parameter in the request that fetches its children). If the folder is a cointainer this is empty string
|
40 | 1ac430a1 | Christos Stathis | */
|
41 | 5cd18037 | Christos Stathis | private String prefix = ""; |
42 | 5cd18037 | Christos Stathis | |
43 | fbff60ff | Christos Stathis | private Set<File> files = new LinkedHashSet<File>(); |
44 | fbff60ff | Christos Stathis | |
45 | 5cd18037 | Christos Stathis | public Folder() {};
|
46 | 9e8e14e4 | Christos Stathis | |
47 | 9e8e14e4 | Christos Stathis | public Folder(String name) { |
48 | 9e8e14e4 | Christos Stathis | this.name = name;
|
49 | 9e8e14e4 | Christos Stathis | } |
50 | 5cd18037 | Christos Stathis | |
51 | 5cd18037 | Christos Stathis | public String getName() { |
52 | 5cd18037 | Christos Stathis | return name;
|
53 | 5cd18037 | Christos Stathis | } |
54 | 9e8e14e4 | Christos Stathis | |
55 | 5cd18037 | Christos Stathis | public Date getLastModified() { |
56 | 5cd18037 | Christos Stathis | return lastModified;
|
57 | 9e8e14e4 | Christos Stathis | } |
58 | 9e8e14e4 | Christos Stathis | |
59 | 5cd18037 | Christos Stathis | public long getBytesUsed() { |
60 | 5cd18037 | Christos Stathis | return bytesUsed;
|
61 | 9e8e14e4 | Christos Stathis | } |
62 | 9e8e14e4 | Christos Stathis | |
63 | 5cd18037 | Christos Stathis | public void setLastModified(Date lastModified) { |
64 | 5cd18037 | Christos Stathis | this.lastModified = lastModified;
|
65 | 5cd18037 | Christos Stathis | } |
66 | 5cd18037 | Christos Stathis | |
67 | 5cd18037 | Christos Stathis | public Set<Folder> getSubfolders() { |
68 | 9e8e14e4 | Christos Stathis | return subfolders;
|
69 | 9e8e14e4 | Christos Stathis | } |
70 | 9e8e14e4 | Christos Stathis | |
71 | 5cd18037 | Christos Stathis | public void setSubfolders(Set<Folder> subfolders) { |
72 | 9e8e14e4 | Christos Stathis | this.subfolders = subfolders;
|
73 | 9e8e14e4 | Christos Stathis | } |
74 | 5cd18037 | Christos Stathis | |
75 | 5cd18037 | Christos Stathis | public String getContainer() { |
76 | 5cd18037 | Christos Stathis | return container;
|
77 | 5cd18037 | Christos Stathis | } |
78 | 5cd18037 | Christos Stathis | |
79 | 5cd18037 | Christos Stathis | public String getPrefix() { |
80 | 5cd18037 | Christos Stathis | return prefix;
|
81 | 5cd18037 | Christos Stathis | } |
82 | 5cd18037 | Christos Stathis | |
83 | 5cd18037 | Christos Stathis | public void setPrefix(String prefix) { |
84 | 5cd18037 | Christos Stathis | this.prefix = prefix;
|
85 | 5cd18037 | Christos Stathis | } |
86 | 5cd18037 | Christos Stathis | |
87 | 5cd18037 | Christos Stathis | public void populate(Response response) { |
88 | 5cd18037 | Christos Stathis | String header = response.getHeader("Last-Modified"); |
89 | 5cd18037 | Christos Stathis | if (header != null) |
90 | 5cd18037 | Christos Stathis | lastModified = DateTimeFormat.getFormat(PredefinedFormat.RFC_2822).parse(header); |
91 | 5cd18037 | Christos Stathis | |
92 | 5cd18037 | Christos Stathis | header = response.getHeader("X-Container-Bytes-Used");
|
93 | 5cd18037 | Christos Stathis | if (header != null) |
94 | 5cd18037 | Christos Stathis | bytesUsed = Long.valueOf(header);
|
95 | 5cd18037 | Christos Stathis | |
96 | 5cd18037 | Christos Stathis | JSONValue json = JSONParser.parseStrict(response.getText()); |
97 | 5cd18037 | Christos Stathis | JSONArray array = json.isArray(); |
98 | 5cd18037 | Christos Stathis | if (array != null) { |
99 | 5cd18037 | Christos Stathis | for (int i=0; i<array.size(); i++) { |
100 | 5cd18037 | Christos Stathis | JSONObject o = array.get(i).isObject(); |
101 | 5cd18037 | Christos Stathis | if (o != null) { |
102 | 1ac430a1 | Christos Stathis | String contentType = unmarshallString(o, "content_type"); |
103 | 0bc032bf | Christos Stathis | if (o.containsKey("subdir") || (contentType != null && (contentType.startsWith("application/directory") || contentType.startsWith("application/folder")))) { |
104 | 5cd18037 | Christos Stathis | Folder f = new Folder();
|
105 | 1ac430a1 | Christos Stathis | f.populate(o, container); |
106 | 5cd18037 | Christos Stathis | subfolders.add(f); |
107 | 5cd18037 | Christos Stathis | } |
108 | 5cd18037 | Christos Stathis | else {
|
109 | fbff60ff | Christos Stathis | File file = new File(); |
110 | 0bc032bf | Christos Stathis | file.populate(o, container); |
111 | fbff60ff | Christos Stathis | files.add(file); |
112 | 5cd18037 | Christos Stathis | } |
113 | 5cd18037 | Christos Stathis | } |
114 | 5cd18037 | Christos Stathis | } |
115 | 5cd18037 | Christos Stathis | } |
116 | 5cd18037 | Christos Stathis | } |
117 | 5cd18037 | Christos Stathis | |
118 | 1ac430a1 | Christos Stathis | public void populate(JSONObject o, String aContainer) { |
119 | 1ac430a1 | Christos Stathis | String path = null; |
120 | 5cd18037 | Christos Stathis | if (o.containsKey("subdir")) { |
121 | 1ac430a1 | Christos Stathis | path = unmarshallString(o, "subdir");
|
122 | 5cd18037 | Christos Stathis | } |
123 | 5cd18037 | Christos Stathis | else {
|
124 | 1ac430a1 | Christos Stathis | path = unmarshallString(o, "name");
|
125 | 5cd18037 | Christos Stathis | lastModified = unmarshallDate(o, "last_modified");
|
126 | 5cd18037 | Christos Stathis | } |
127 | 1ac430a1 | Christos Stathis | if (path.endsWith("/")) |
128 | 1ac430a1 | Christos Stathis | path = path.substring(0, path.length() - 1); |
129 | 1ac430a1 | Christos Stathis | if (path.contains("/")) |
130 | 1ac430a1 | Christos Stathis | name = path.substring(path.lastIndexOf("/") + 1, path.length()); //strip the prefix |
131 | 1ac430a1 | Christos Stathis | else
|
132 | 1ac430a1 | Christos Stathis | name = path; |
133 | 1ac430a1 | Christos Stathis | if (aContainer != null) { |
134 | 1ac430a1 | Christos Stathis | container = aContainer; |
135 | 1ac430a1 | Christos Stathis | prefix = path; |
136 | 1ac430a1 | Christos Stathis | } |
137 | 1ac430a1 | Christos Stathis | else {
|
138 | 1ac430a1 | Christos Stathis | container = name; |
139 | 1ac430a1 | Christos Stathis | prefix = "";
|
140 | 1ac430a1 | Christos Stathis | } |
141 | 5cd18037 | Christos Stathis | } |
142 | 5cd18037 | Christos Stathis | |
143 | 5cd18037 | Christos Stathis | @Override
|
144 | 5cd18037 | Christos Stathis | public String getLastModifiedSince() { |
145 | 5cd18037 | Christos Stathis | return null; //To change body of implemented methods use File | Settings | File Templates. |
146 | 5cd18037 | Christos Stathis | } |
147 | 5cd18037 | Christos Stathis | |
148 | 5cd18037 | Christos Stathis | public static Folder createFromResponse(Response response, Folder result) { |
149 | 5cd18037 | Christos Stathis | Folder f = null;
|
150 | 5cd18037 | Christos Stathis | if (result == null) |
151 | 5cd18037 | Christos Stathis | f = new Folder();
|
152 | 5cd18037 | Christos Stathis | else
|
153 | 5cd18037 | Christos Stathis | f = result; |
154 | 5cd18037 | Christos Stathis | |
155 | 5cd18037 | Christos Stathis | f.populate(response); |
156 | 5cd18037 | Christos Stathis | return f;
|
157 | 5cd18037 | Christos Stathis | } |
158 | 5cd18037 | Christos Stathis | |
159 | 5cd18037 | Christos Stathis | @Override
|
160 | 5cd18037 | Christos Stathis | public boolean equals(Object other) { |
161 | 5cd18037 | Christos Stathis | if (other instanceof Folder) { |
162 | 5cd18037 | Christos Stathis | Folder o = (Folder) other; |
163 | 1ac430a1 | Christos Stathis | if (container != null) |
164 | 1ac430a1 | Christos Stathis | return prefix.equals(o.getPrefix()) && container.equals(o.getContainer());
|
165 | 1ac430a1 | Christos Stathis | else
|
166 | 1ac430a1 | Christos Stathis | return o.getContainer() == null && name.equals(o.getName()); |
167 | 5cd18037 | Christos Stathis | } |
168 | 5cd18037 | Christos Stathis | return false; |
169 | 5cd18037 | Christos Stathis | } |
170 | 5cd18037 | Christos Stathis | |
171 | 5cd18037 | Christos Stathis | @Override
|
172 | 5cd18037 | Christos Stathis | public int hashCode() { |
173 | 5cd18037 | Christos Stathis | return prefix.hashCode() + name.hashCode();
|
174 | 5cd18037 | Christos Stathis | } |
175 | fbff60ff | Christos Stathis | |
176 | fbff60ff | Christos Stathis | public Set<File> getFiles() { |
177 | fbff60ff | Christos Stathis | return files;
|
178 | fbff60ff | Christos Stathis | } |
179 | 9e8e14e4 | Christos Stathis | } |