1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.cache.browser.app;
35
36 import info.magnolia.cache.browser.rest.client.CacheService;
37 import info.magnolia.module.cache.cachekey.CacheKey;
38 import info.magnolia.ui.vaadin.integration.jcr.DefaultProperty;
39
40 import java.lang.reflect.InvocationTargetException;
41 import java.util.Collection;
42 import java.util.Collections;
43 import java.util.HashMap;
44 import java.util.Map;
45
46 import org.apache.commons.beanutils.BeanUtils;
47 import org.apache.commons.lang3.StringUtils;
48
49 import com.vaadin.v7.data.Item;
50 import com.vaadin.v7.data.Property;
51
52
53
54
55 public class CacheKeyItem implements Item {
56
57 public static final String PROPERTY_LOCATION = "locations";
58 public static final String PROPERTY_CACHE_NAME = "cacheName";
59 public static final String PROPERTY_EXTENSION = "extension";
60
61 private CacheKey cacheKey;
62
63 private Map<String, CacheService> cacheServices = new HashMap<>();
64
65 private String cacheName;
66
67 public CacheKeyItem(String cacheName, CacheKey cacheKey) {
68 this.cacheName = cacheName;
69 this.cacheKey = cacheKey;
70 }
71
72 @Override
73 public Property<?> getItemProperty(Object id) {
74 if (PROPERTY_LOCATION.equals(id)) {
75 return new DefaultProperty<>(StringUtils.join(cacheServices.keySet(), ", "));
76 } else if (PROPERTY_CACHE_NAME.equals(id)) {
77 return new DefaultProperty<>(cacheName);
78 } else if (PROPERTY_EXTENSION.equals(id)) {
79 String uri;
80 try {
81 uri = BeanUtils.getProperty(cacheKey, "uri");
82 String extension = StringUtils.substringAfterLast(uri, ".");
83 return new DefaultProperty<>(extension);
84 } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
85
86 }
87 } else {
88 try {
89 String str = BeanUtils.getProperty(cacheKey, id.toString());
90 if (StringUtils.isBlank(str)) {
91 return null;
92 }
93 return new DefaultProperty<>(BeanUtils.getProperty(cacheKey, id.toString()));
94 } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
95
96 }
97 }
98 return null;
99 }
100
101 @Override
102 public Collection<?> getItemPropertyIds() {
103 return Collections.emptyList();
104 }
105
106 @Override
107 public boolean addItemProperty(Object id, Property property) throws UnsupportedOperationException {
108 throw new UnsupportedOperationException();
109 }
110
111 @Override
112 public boolean removeItemProperty(Object id) throws UnsupportedOperationException {
113 throw new UnsupportedOperationException();
114 }
115
116 public void addCacheService(String name, CacheService cacheService) {
117 cacheServices.put(name, cacheService);
118 }
119
120 public CacheKey getItemId() {
121 return cacheKey;
122 }
123
124 public Map<String, CacheService> getCacheServices() {
125 return cacheServices;
126 }
127
128 public String getCacheName() {
129 return cacheName;
130 }
131
132 @Override
133 public boolean equals(Object obj) {
134 if (obj == null) {
135 return false;
136 }
137 if (!(obj instanceof CacheKeyItem)) {
138 return false;
139 }
140 if (!cacheName.equals(((CacheKeyItem) obj).getCacheName())) {
141 return false;
142 }
143 return cacheKey.equals(((CacheKeyItem) obj).getItemId());
144 }
145
146 @Override
147 public int hashCode() {
148 return cacheKey.hashCode() + cacheName.hashCode();
149 }
150 }