View Javadoc
1   /*
2    * #%L
3    * wcm.io
4    * %%
5    * Copyright (C) 2014 wcm.io
6    * %%
7    * Licensed under the Apache License, Version 2.0 (the "License");
8    * you may not use this file except in compliance with the License.
9    * You may obtain a copy of the License at
10   *
11   *      http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   * #L%
19   */
20  package io.wcm.wcm.ui.extjs.provider.impl.util;
21  
22  import java.util.Calendar;
23  import java.util.Iterator;
24  import java.util.Locale;
25  
26  import org.apache.commons.lang3.StringUtils;
27  import org.apache.jackrabbit.util.Text;
28  import org.apache.sling.api.resource.Resource;
29  import org.apache.sling.api.resource.ValueMap;
30  
31  import com.day.cq.commons.Filter;
32  import com.day.cq.tagging.Tag;
33  import com.day.cq.wcm.api.Page;
34  import com.day.cq.wcm.api.PageManager;
35  import com.day.cq.wcm.api.Template;
36  import com.day.cq.wcm.api.WCMException;
37  import com.day.cq.wcm.commons.DeepResourceIterator;
38  
39  /**
40   * Virtual page implementation for handling sling:Folder and sling:OrderedFolder nodes as pages in {@link PageIterator}
41   */
42  class SlingFolderVirtualPage implements Page {
43  
44    private final Resource resource;
45  
46    SlingFolderVirtualPage(Resource resource) {
47      this.resource = resource;
48    }
49  
50    @Override
51    public String getDescription() {
52      return null;
53    }
54  
55    @SuppressWarnings({ "unchecked", "null" })
56    @Override
57    public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
58      if (type == Resource.class) {
59        return (AdapterType)resource;
60      }
61      else {
62        return resource.adaptTo(type);
63      }
64    }
65  
66    @Override
67    public boolean canUnlock() {
68      return false;
69    }
70  
71    @Override
72    public Page getAbsoluteParent(int level) {
73      String parentPath = Text.getAbsoluteParent(resource.getPath(), level - 1);
74      Resource parentResource = resource.getResourceResolver().getResource(parentPath);
75      if (parentResource != null) {
76        return parentResource.adaptTo(Page.class);
77      }
78      return null;
79    }
80  
81    @Override
82    public Resource getContentResource() {
83      return null;
84    }
85  
86    @Override
87    public Resource getContentResource(String path) {
88      return null;
89    }
90  
91    @Override
92    public int getDepth() {
93      if (StringUtils.equals("/", this.resource.getPath())) {
94        return 0;
95      }
96      else {
97        return StringUtils.countMatches(this.resource.getPath(), "/");
98      }
99    }
100 
101   @Override
102   public Locale getLanguage(boolean ignoreContent) {
103     return null;
104   }
105 
106   @Override
107   public Locale getLanguage() {
108     return null;
109   }
110 
111   @Override
112   public Calendar getLastModified() {
113     return null;
114   }
115 
116   @Override
117   public String getLastModifiedBy() {
118     return null;
119   }
120 
121   @Override
122   public String getLockOwner() {
123     return null;
124   }
125 
126   @Override
127   public String getName() {
128     return resource.getName();
129   }
130 
131   @Override
132   public String getNavigationTitle() {
133     return null;
134   }
135 
136   @Override
137   public Calendar getOffTime() {
138     return null;
139   }
140 
141   @Override
142   public Calendar getOnTime() {
143     return null;
144   }
145 
146   @Override
147   public PageManager getPageManager() {
148     return resource.getResourceResolver().adaptTo(PageManager.class);
149   }
150 
151   @Override
152   public String getPageTitle() {
153     return null;
154   }
155 
156   @Override
157   public Page getParent() {
158     Resource parentResource = resource.getParent();
159     if (parentResource == null) {
160       return null;
161     }
162     return parentResource.adaptTo(Page.class);
163   }
164 
165   @Override
166   public Page getParent(int level) {
167     String parentPath = Text.getRelativeParent(resource.getPath(), level);
168     Resource parentResource = resource.getResourceResolver().getResource(parentPath);
169     if (parentResource != null) {
170       return parentResource.adaptTo(Page.class);
171     }
172     return null;
173   }
174 
175   @Override
176   public String getPath() {
177     return resource.getPath();
178   }
179 
180   @Override
181   public ValueMap getProperties() {
182     return ValueMap.EMPTY;
183   }
184 
185   @Override
186   public ValueMap getProperties(String path) {
187     return null;
188   }
189 
190   @Override
191   public Tag[] getTags() {
192     return new Tag[0];
193   }
194 
195   @Override
196   public Template getTemplate() {
197     return null;
198   }
199 
200   @Override
201   public String getTitle() {
202     return null;
203   }
204 
205   @Override
206   public String getVanityUrl() {
207     return null;
208   }
209 
210   @Override
211   public boolean hasChild(String name) {
212     return false;
213   }
214 
215   @Override
216   public boolean hasContent() {
217     return false;
218   }
219 
220   @Override
221   public boolean isHideInNav() {
222     return false;
223   }
224 
225   @Override
226   public boolean isLocked() {
227     return false;
228   }
229 
230   @Override
231   public boolean isValid() {
232     return false;
233   }
234 
235   @Override
236   public Iterator<Page> listChildren() {
237     return listChildren(null);
238   }
239 
240   @Override
241   public Iterator<Page> listChildren(final Filter<Page> filter) {
242     return listChildren(filter, false);
243   }
244 
245   @Override
246   public Iterator<Page> listChildren(final Filter<Page> filter, final boolean deep) {
247     Iterator<Resource> resources;
248     if (deep) {
249       resources = new DeepResourceIterator(resource);
250     }
251     else {
252       resources = resource.getResourceResolver().listChildren(resource);
253     }
254 
255     // return filtered page iterator
256     return new PageIterator(resources, filter);
257   }
258 
259   @Override
260   public void lock() throws WCMException {
261     throw new UnsupportedOperationException();
262   }
263 
264   @Override
265   public long timeUntilValid() {
266     return 0L;
267   }
268 
269   @Override
270   public void unlock() throws WCMException {
271     throw new UnsupportedOperationException();
272   }
273 
274   @Override
275   public Calendar getDeleted() {
276     throw new UnsupportedOperationException();
277   }
278 
279   @Override
280   public String getDeletedBy() {
281     throw new UnsupportedOperationException();
282   }
283 
284 }