package de.elatexam.editor.pages;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import net.databinder.auth.components.DataSignInPanel;
import net.databinder.components.NullPlug;
import org.apache.wicket.Component;
import org.apache.wicket.markup.html.IHeaderResponse;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.panel.EmptyPanel;
import org.wicketstuff.jslibraries.CDN;
import org.wicketstuff.jslibraries.JSLib;
import org.wicketstuff.jslibraries.Library;
import org.wicketstuff.jslibraries.VersionDescriptor;
import com.mrhaki.wicket.components.DeployJava;
import de.elatexam.editor.TaskEditorSession;
import de.elatexam.editor.components.menu.ChromeMenu;
import de.elatexam.editor.components.menu.LinkVO;
import de.elatexam.editor.components.menu.LinkVO.Create;
import de.elatexam.editor.components.panels.Footer;
import de.elatexam.editor.user.BasicUser;
import de.elatexam.editor.user.UserStatusPanel;
import de.elatexam.model.ClozeSubTaskDef;
import de.elatexam.model.MappingSubTaskDef;
import de.elatexam.model.McSubTaskDef;
import de.elatexam.model.PaintSubTaskDef;
import de.elatexam.model.TextSubTaskDef;
public class OverviewPage extends WebPage {
/** Add components to be displayed on page. */
public OverviewPage() {
if (TaskEditorSession.get().isSignedIn()) {
add(new ChromeMenu("menubar", getMenuList(), ChromeMenu.Theme.THEME5));
add(createToolbar("toolbar"));
} else {
add(new NullPlug("menubar"));
add(new EmptyPanel("toolbar"));
}
// sign in/out links
add(new UserStatusPanel("userStatus"));
add(new DataSignInPanel<BasicUser>("loginpanel", null) {
@Override
public boolean isVisible() {
return !TaskEditorSession.get().isSignedIn();
}
});
add(new Footer("footer"));
}
/* (non-Javadoc)
* @see org.apache.wicket.Component#renderHead(org.apache.wicket.markup.html.IHeaderResponse)
*/
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
response.renderJavaScriptReference(DeployJava.LOCAL_REFERENCE);
}
/**
* Create a panel with links etc. that act as toolbar. This panel gets rendered right below the menu.
*
* @return
*/
protected Component createToolbar(final String id) {
return new EmptyPanel(id);
}
/**
* @return
*/
private List<List<LinkVO>> getMenuList() {
final List<List<LinkVO>> res = new LinkedList<List<LinkVO>>();
// must not create the link result page now,
// leads to StackoverflowError in case of resultpage extends OverviewPage
// TODO make the menu behave like a tabbed panel
res.add(Arrays.asList(new LinkVO(TaskDefPage.class, "Prüfungen")));
res.add(Arrays.asList(new LinkVO(ShowSubtaskDefsPage.class, "Alle Aufgaben"),
new LinkVO(new Create() {
public WebPage createPage() {
return new ShowSubtaskDefsPage<McSubTaskDef>(McSubTaskDef.class);
}
}, "Alle MC-Aufgaben"), new LinkVO(new Create() {
public WebPage createPage() {
return new ShowSubtaskDefsPage<ClozeSubTaskDef>(ClozeSubTaskDef.class);
}
}, "Alle Lückentext-Aufgaben"), new LinkVO(new Create() {
public WebPage createPage() {
return new ShowSubtaskDefsPage<TextSubTaskDef>(TextSubTaskDef.class);
}
}, "Alle Text-Aufgaben"), new LinkVO(new Create() {
public WebPage createPage() {
return new ShowSubtaskDefsPage<PaintSubTaskDef>(PaintSubTaskDef.class);
}
}, "Alle Zeichen-Aufgaben"), new LinkVO(new Create() {
public WebPage createPage() {
return new ShowSubtaskDefsPage<MappingSubTaskDef>(MappingSubTaskDef.class);
}
}, "Alle Zuordnungs-Aufgaben")));
res.add(Arrays.asList(new LinkVO(StatisticPage.class, "Statistiken")));
res.add(Arrays.asList(new LinkVO(UploadComplexTaskdefPage.class, "Importieren")));
return res;
}
}