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.ui.admincentral.thumbnail.view;
35
36 import info.magnolia.context.MgnlContext;
37 import info.magnolia.ui.model.imageprovider.definition.ImageProvider;
38 import info.magnolia.ui.model.workbench.definition.WorkbenchDefinition;
39 import info.magnolia.ui.vaadin.integration.jcr.JcrNodeAdapter;
40 import info.magnolia.ui.vaadin.integration.jcr.container.AbstractJcrContainer;
41 import info.magnolia.ui.vaadin.layout.LazyThumbnailLayout;
42 import info.magnolia.ui.vaadin.layout.LazyThumbnailLayout.ThumbnailDblClickListener;
43 import info.magnolia.ui.vaadin.layout.LazyThumbnailLayout.ThumbnailSelectionListener;
44
45 import javax.jcr.Node;
46 import javax.jcr.RepositoryException;
47 import javax.jcr.Session;
48
49 import org.slf4j.Logger;
50 import org.slf4j.LoggerFactory;
51
52 import com.vaadin.ui.Component;
53 import com.vaadin.ui.CssLayout;
54
55
56
57
58
59 public class LazyThumbnailViewImpl implements ThumbnailView {
60
61 private static final Logger log = LoggerFactory.getLogger(LazyThumbnailViewImpl.class);
62
63 private ThumbnailContainer container;
64
65 private final WorkbenchDefinition workbenchDefinition;
66
67 private Listener listener;
68
69 private final LazyThumbnailLayout layout;
70
71 private final CssLayout margin = new CssLayout();
72
73 private final ImageProvider imageProvider;
74
75 public LazyThumbnailViewImpl(final WorkbenchDefinition definition, final ThumbnailContainer container) {
76 this.workbenchDefinition = definition;
77 this.imageProvider = container.getImageProvider();
78 this.layout = new LazyThumbnailLayout();
79 this.container = container;
80 layout.setSizeFull();
81 layout.addStyleName("mgnl-workbench-thumbnail-view");
82
83 layout.addThumbnailSelectionListener(new ThumbnailSelectionListener() {
84
85 @Override
86 public void onThumbnailSelected(final String thumbnailId) {
87 JcrNodeAdapter node = getThumbnailNodeAdapterByIdentifier(thumbnailId);
88 listener.onItemSelection(node);
89 }
90 });
91
92 layout.addDoubleClickListener(new ThumbnailDblClickListener() {
93
94 @Override
95 public void onThumbnailDblClicked(final String thumbnailId) {
96 JcrNodeAdapter node = getThumbnailNodeAdapterByIdentifier(thumbnailId);
97 listener.onDoubleClick(node);
98 }
99 });
100 margin.setSizeFull();
101 margin.setStyleName("mgnl-content-view");
102 margin.addComponent(layout);
103 }
104
105 @Override
106 public void setListener(Listener listener) {
107 this.listener = listener;
108 }
109
110 @Override
111 public void select(String path) {
112
113 }
114
115 @Override
116 public final void refresh() {
117 this.container = new ThumbnailContainer(workbenchDefinition, imageProvider);
118 container.setWorkspaceName(workbenchDefinition.getWorkspace());
119 container.setThumbnailHeight(73);
120 container.setThumbnailWidth(73);
121 layout.setContainerDataSource(container);
122 layout.setThumbnailSize(73, 73);
123 }
124
125 @Override
126 public AbstractJcrContainer getContainer() {
127 throw new UnsupportedOperationException();
128 }
129
130 @Override
131 public Component asVaadinComponent() {
132 return margin;
133 }
134
135 private String prepareJcrSQL2Query() {
136 final String itemType = workbenchDefinition.getMainItemType().getItemType();
137 return "select * from [" + itemType + "] as t order by name(t)";
138
139 }
140
141 private JcrNodeAdapter getThumbnailNodeAdapterByIdentifier(final String thumbnailId) {
142 try {
143 Session session = MgnlContext.getJCRSession(workbenchDefinition.getWorkspace());
144 final Node imageNode = session.getNodeByIdentifier(thumbnailId);
145 return new JcrNodeAdapter(imageNode);
146 } catch (RepositoryException e) {
147 log.error(e.getMessage());
148 }
149 return null;
150 }
151
152 @Override
153 public ViewType getViewType() {
154 return ViewType.THUMBNAIL;
155 }
156 }