![JAR search and dependency download from the Maven repository](/logo.png)
org.efaps.ui.wicket.components.tree.StructurBrowserTree Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of efaps-webapp Show documentation
Show all versions of efaps-webapp Show documentation
eFaps WebApp provides a web interface as the User Interface for eFaps
which can be easily expanded and altered.
/*
* Copyright 2003 - 2012 The eFaps Team
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Revision: $Rev: 8900 $
* Last Changed: $Date: 2013-02-20 13:50:19 -0500 (Wed, 20 Feb 2013) $
* Last Changed By: $Author: [email protected] $
*/
package org.efaps.ui.wicket.components.tree;
import org.apache.wicket.Component;
import org.apache.wicket.Page;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxEventBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.attributes.AjaxCallListener;
import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
import org.apache.wicket.extensions.markup.html.repeater.tree.NestedTree;
import org.apache.wicket.extensions.markup.html.repeater.tree.content.Folder;
import org.apache.wicket.extensions.markup.html.repeater.tree.theme.HumanTheme;
import org.apache.wicket.extensions.markup.html.repeater.tree.theme.WindowsTheme;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.MarkupStream;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.link.ILinkListener;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.util.SetModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.efaps.ui.wicket.components.menutree.MenuTree;
import org.efaps.ui.wicket.components.menutree.TreeMenuModel;
import org.efaps.ui.wicket.models.objects.UIStructurBrowser;
import org.efaps.ui.wicket.pages.content.form.FormPage;
import org.efaps.ui.wicket.pages.content.structurbrowser.StructurBrowserPage;
import org.efaps.ui.wicket.pages.content.table.TablePage;
import org.efaps.ui.wicket.pages.contentcontainer.ContentContainerPage;
import org.efaps.ui.wicket.pages.error.ErrorPage;
import org.efaps.ui.wicket.resources.AbstractEFapsHeaderItem;
import org.efaps.ui.wicket.resources.EFapsContentReference;
import org.efaps.ui.wicket.util.Configuration;
import org.efaps.ui.wicket.util.Configuration.ConfigAttribute;
import org.efaps.util.EFapsException;
import org.efaps.util.cache.CacheReloadException;
/**
* This class renders a Tree, which loads the children asynchron.
* The items of the tree consists of junction link, icon and label. An
* additional arrow showing the direction of the child can be rendered depending
* on a Tristate.
*
* @author The eFaps Team
* @version $Id: StructurBrowserTree.java 7556 2012-05-29 19:51:07Z
* [email protected] $
*/
public class StructurBrowserTree
extends NestedTree
{
/**
* Needed for serialization.
*/
private static final long serialVersionUID = 1L;
/**
* ResourceReference to the StyleSheet used for this Tree.
*/
private static final EFapsContentReference CSS = new EFapsContentReference(StructurBrowserTree.class,
"StructurTree.css");
/**
* @param _wicketId WicketId of the Tree
* @param _model Model for this Tree
*/
public StructurBrowserTree(final String _wicketId,
final IModel _model)
{
super(_wicketId, new StructurBrowserProvider(_model),
new SetModel(_model.getObject().getExpandedBrowsers()));
if ("human".equals(Configuration.getAttribute(ConfigAttribute.STRUCTREE_CLASS))) {
add(new HumanTheme());
} else if ("windows".equals(Configuration.getAttribute(ConfigAttribute.STRUCTREE_CLASS))) {
add(new WindowsTheme());
}
}
/*
* (non-Javadoc)
* @see org.apache.wicket.extensions.markup.html.repeater.tree.AbstractTree#
* newContentComponent(java.lang.String, org.apache.wicket.model.IModel)
*/
@Override
protected Component newContentComponent(final String _wicketId,
final IModel _model)
{
// TODO Auto-generated method stub
return new Folder(_wicketId, this, _model)
{
private static final long serialVersionUID = 1L;
@Override
protected Component newLabelComponent(final String _id,
final IModel _model)
{
return new ItemLink(_id, _model);
}
@Override
protected boolean isClickable()
{
return true;
}
};
}
@Override
public void renderHead(final IHeaderResponse _response)
{
super.renderHead(_response);
_response.render(AbstractEFapsHeaderItem.forCss(StructurBrowserTree.CSS));
}
public class ItemLink
extends WebMarkupContainer
implements ILinkListener
{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* @param _id
* @param _model
*/
public ItemLink(final String _id,
final IModel _model)
{
super(_id, _model);
add(new ItemLinkBehavior());
}
@Override
public void onComponentTagBody(final MarkupStream _markupStream,
final ComponentTag _openTag)
{
final UIStructurBrowser uiStrBrws = (UIStructurBrowser) getDefaultModelObject();
super.replaceComponentTagBody(_markupStream, _openTag, uiStrBrws.getLabel());
}
/*
* (non-Javadoc)
* @see org.apache.wicket.markup.html.link.ILinkListener#onLinkClicked()
*/
@Override
public void onLinkClicked()
{
final UIStructurBrowser uiStrBrws = (UIStructurBrowser) getDefaultModelObject();
Page page;
try {
if (uiStrBrws.getCommand().getTargetTable() != null) {
if (uiStrBrws.getCommand().getTargetStructurBrowserField() != null) {
page = new StructurBrowserPage(uiStrBrws.getCommandUUID(),
uiStrBrws.getInstanceKey(), getPage()
.getPageReference());
} else {
page = new TablePage(uiStrBrws.getCommandUUID(), uiStrBrws.getInstanceKey(), getPage()
.getPageReference());
}
} else {
page = new FormPage(uiStrBrws.getCommandUUID(), uiStrBrws.getInstanceKey(), getPage()
.getPageReference());
}
} catch (final EFapsException e) {
page = new ErrorPage(e);
}
setResponsePage(page);
}
}
private final class ItemLinkBehavior
extends AjaxEventBehavior
{
private static final long serialVersionUID = 1L;
public ItemLinkBehavior()
{
super("onclick");
}
@Override
protected void onEvent(final AjaxRequestTarget _target)
{
try {
final UIStructurBrowser uiStrBrws = (UIStructurBrowser) getComponent().getDefaultModelObject();
final MenuTree menutree = ((ContentContainerPage) getPage()).getMenuTree();
final TreeMenuModel treeProvider = (TreeMenuModel) menutree.getProvider();
treeProvider.setModel(uiStrBrws.getCommandUUID(), uiStrBrws.getInstanceKey());
treeProvider.getRoots().next().setHeader(true);
menutree.setDefault(null);
menutree.setSelected(null);
_target.add(menutree);
} catch (final CacheReloadException e) {
throw new RestartResponseException(new ErrorPage(e));
}
}
/*
* (non-Javadoc)
* @see
* org.apache.wicket.ajax.AjaxEventBehavior#updateAjaxAttributes(org
* .apache.wicket.ajax.attributes.AjaxRequestAttributes)
*/
@Override
protected void updateAjaxAttributes(final AjaxRequestAttributes _attributes)
{
super.updateAjaxAttributes(_attributes);
final AjaxCallListener listener = new AjaxCallListener();
final StringBuilder js = new StringBuilder();
js.append("dijit.registry.byId(\"").append(((ContentContainerPage) getPage()).getCenterPanelId())
.append("\").set(\"content\", dojo.create(\"iframe\", {")
.append("\"src\": \"")
.append(getComponent().urlFor(ILinkListener.INTERFACE, new PageParameters()))
.append("\",\"style\": \"border: 0; width: 100%; height: 99%\"")
.append("})); ");
listener.onAfter(js);
_attributes.getAjaxCallListeners().add(listener);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy