1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.client.console.panels;
20
21 import org.apache.wicket.ajax.AjaxRequestTarget;
22 import org.apache.wicket.ajax.markup.html.AjaxLink;
23 import org.apache.wicket.markup.html.IHeaderContributor;
24 import org.apache.wicket.markup.html.WebMarkupContainer;
25 import org.apache.wicket.markup.html.basic.Label;
26 import org.apache.wicket.markup.html.panel.Panel;
27 import org.apache.wicket.model.ResourceModel;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
30
31 public class MultilevelPanel extends Panel implements IHeaderContributor {
32
33 private static final long serialVersionUID = -4064294905566247729L;
34
35 protected static final Logger LOG = LoggerFactory.getLogger(MultilevelPanel.class);
36
37 public static final String FIRST_LEVEL_ID = "first";
38
39 public static final String SECOND_LEVEL_ID = "second";
40
41 private boolean isFirstLevel = true;
42
43 private final WebMarkupContainer firstLevelContainer;
44
45 private final WebMarkupContainer secondLevelContainer;
46
47 public MultilevelPanel(final String id) {
48 super(id);
49
50 firstLevelContainer = new WebMarkupContainer("firstLevelContainer");
51 firstLevelContainer.setOutputMarkupPlaceholderTag(true);
52 firstLevelContainer.setVisible(true);
53 add(firstLevelContainer);
54
55 secondLevelContainer = new WebMarkupContainer("secondLevelContainer");
56 secondLevelContainer.setOutputMarkupPlaceholderTag(true);
57 secondLevelContainer.setVisible(false);
58 add(secondLevelContainer);
59
60 secondLevelContainer.add(new AjaxLink<String>("back") {
61
62 private static final long serialVersionUID = -7978723352517770644L;
63
64 @Override
65 public void onClick(final AjaxRequestTarget target) {
66 onClickBackInternal(target);
67 prev(target);
68 }
69 });
70 }
71
72 public final void next(final String title, final SecondLevel secondLevel, final AjaxRequestTarget target) {
73 if (isFirstLevel) {
74 secondLevelContainer.addOrReplace(new Label("title", new ResourceModel(title, title)));
75 secondLevelContainer.addOrReplace(secondLevel);
76 secondLevelContainer.setVisible(true);
77 target.add(secondLevelContainer);
78
79 firstLevelContainer.setVisible(false);
80 target.add(firstLevelContainer);
81
82 isFirstLevel = false;
83 } else {
84 LOG.warn("No further level available");
85 }
86 }
87
88 public void prev(final AjaxRequestTarget target) {
89 if (isFirstLevel) {
90 LOG.warn("No further level available");
91 } else {
92 firstLevelContainer.setVisible(true);
93 target.add(firstLevelContainer);
94
95 secondLevelContainer.setVisible(false);
96 target.add(secondLevelContainer);
97
98 isFirstLevel = true;
99 }
100 }
101
102 protected void onClickBackInternal(final AjaxRequestTarget taget) {
103 }
104
105
106
107
108
109
110
111 public MultilevelPanel setFirstLevel(final Panel panel) {
112 firstLevelContainer.addOrReplace(panel);
113 return this;
114 }
115
116 public static class SecondLevel extends Panel {
117
118 private static final long serialVersionUID = 5685291231060035528L;
119
120 public SecondLevel() {
121 this(SECOND_LEVEL_ID);
122 }
123
124 public SecondLevel(final String id) {
125 super(id);
126 }
127 }
128 }