![JAR search and dependency download from the Maven repository](/logo.png)
org.efaps.ui.wicket.components.tree.SubElement 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: 8235 $
* Last Changed: $Date: 2012-11-22 23:04:21 -0500 (Thu, 22 Nov 2012) $
* Last Changed By: $Author: [email protected] $
*/
package org.efaps.ui.wicket.components.tree;
import java.util.Iterator;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.PageReference;
import org.apache.wicket.extensions.markup.html.repeater.tree.AbstractTree.State;
import org.apache.wicket.extensions.markup.html.repeater.tree.NestedTree;
import org.apache.wicket.extensions.markup.html.repeater.tree.nested.BranchItem;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.IItemFactory;
import org.apache.wicket.markup.repeater.IItemReuseStrategy;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.RefreshingView;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.efaps.ui.wicket.components.LabelComponent;
import org.efaps.ui.wicket.components.table.cell.CellPanel;
import org.efaps.ui.wicket.components.table.row.RowId;
import org.efaps.ui.wicket.models.AbstractInstanceObject;
import org.efaps.ui.wicket.models.UIModel;
import org.efaps.ui.wicket.models.cell.UIHiddenCell;
import org.efaps.ui.wicket.models.cell.UIStructurBrowserTableCell;
import org.efaps.ui.wicket.models.cell.UITableCell;
import org.efaps.ui.wicket.models.objects.UIStructurBrowser;
import org.efaps.ui.wicket.models.objects.UITable;
import org.efaps.ui.wicket.pages.content.AbstractContentPage;
import org.efaps.ui.wicket.pages.contentcontainer.ContentContainerPage;
import org.efaps.util.EFapsException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* TODO comment!
*
* @author The eFaps Team
* @version $Id: SubElement.java 8235 2012-11-23 04:04:21Z [email protected] $
*/
public class SubElement
extends Panel
{
/**
* Needed for serialization.
*/
private static final long serialVersionUID = 1L;
/**
* Logging instance used in this class.
*/
private static final Logger LOG = LoggerFactory.getLogger(SubElement.class);
/**
* SubTree element.
*/
private NestedTree tree;
/**
* @param _wicketId wicket id for this component
* @param _tree Nested tree element
* @param _model model for this component
*/
public SubElement(final String _wicketId,
final NestedTree _tree,
final IModel _model)
{
super(_wicketId, _model);
if (_tree == null) {
throw new IllegalArgumentException("argument [tree] cannot be null");
}
this.tree = _tree;
final RefreshingView branches = new RefreshingView("branches")
{
private static final long serialVersionUID = 1L;
@Override
protected Iterator> getItemModels()
{
return new ModelIterator();
}
@Override
protected Item newItem(final String _wicketId,
final int _index,
final IModel _model)
{
return newBranchItem(_wicketId, _index, _model);
}
@Override
protected void populateItem(final Item _item)
{
try {
populateBranch(_item);
} catch (final EFapsException e) {
SubElement.LOG.error("EFapsException", e);
}
}
};
branches.setItemReuseStrategy(new IItemReuseStrategy()
{
private static final long serialVersionUID = 1L;
public Iterator- > getItems(final IItemFactory
_factory,
final Iterator> _newModels,
final Iterator- > _existingItems)
{
return SubElement.this.tree.getItemReuseStrategy().getItems(_factory, _newModels, _existingItems);
}
});
add(branches);
}
/**
* @return the model for this element
*/
@SuppressWarnings("unchecked")
public IModel
getModel()
{
return (IModel) getDefaultModel();
}
/**
* @return the model object of this element
*/
public UIStructurBrowser getModelObject()
{
return getModel().getObject();
}
/**
* @param _wicketId wicket id for the branch item
* @param _index index for the item
* @param _model model for the item
* @return new BrancheItem
*/
protected BranchItem newBranchItem(final String _wicketId,
final int _index,
final IModel _model)
{
return new BranchItem(_wicketId, _index, _model);
}
/**
* @param _item item to be used for population
* @throws EFapsException on error
*/
protected void populateBranch(final Item _item)
throws EFapsException
{
final IModel model = _item.getModel();
final UIStructurBrowser strucBrws = model.getObject();
final RepeatingView cellsBeforeRepeater = new RepeatingView("cellsBeforeRepeater");
_item.add(cellsBeforeRepeater);
final RepeatingView cellsAfterRepeater = new RepeatingView("cellsAfterRepeater");
_item.add(cellsAfterRepeater);
int i = strucBrws.getTableId();
if (strucBrws.isEditMode()) {
final Label cell = new Label(cellsBeforeRepeater.newChildId(), "");
cell.add(AttributeModifier.append("class", "eFapsTableCellClear"));
cell.add(AttributeModifier.append("class", "eFapsSTBRWtmp"));
cell.add(AttributeModifier.append("class", "eFapsTableCell eFapsTableCellEdit eFapsCellFixedWidth" + i));
cell.setOutputMarkupId(true);
cellsBeforeRepeater.add(cell);
i++;
}
if (strucBrws.isShowCheckBoxes()) {
final CellPanel cell = new CellPanel(cellsBeforeRepeater.newChildId(), strucBrws.getInstanceKey());
if (i == strucBrws.getTableId()) {
cell.add(AttributeModifier.append("class", "eFapsTableCellClear"));
}
cell.add(AttributeModifier.append("class", "eFapsSTBRWtmp"));
cell.add(AttributeModifier.append("class", "eFapsTableCheckBoxCell eFapsCellFixedWidth" + i));
cell.setOutputMarkupId(true);
cellsBeforeRepeater.add(cell);
i++;
}
final PageReference pageRef = ((AbstractContentPage) getPage()).getCalledByPageReference();
boolean updateMenu = false;
if (pageRef != null && pageRef.getPage() instanceof ContentContainerPage) {
updateMenu = true;
}
boolean firstCell = true;
boolean before = true;
for (final UIStructurBrowserTableCell uiCell : strucBrws.getColumns()) {
final Component cell;
if (uiCell.isBrowserField()) {
before = false;
cell = SubElement.this.tree.newNodeComponent("node", model);
_item.add(cell);
} else {
RepeatingView repeater;
if (before) {
repeater = cellsBeforeRepeater;
} else {
repeater = cellsAfterRepeater;
}
cell = new CellPanel(repeater.newChildId(), new UIModel(uiCell),
updateMenu, new UITable(strucBrws.getCommandUUID(), strucBrws.getInstanceKey()), 0);
cell.setOutputMarkupId(true);
repeater.add(cell);
}
if (i == strucBrws.getTableId()) {
cell.add(AttributeModifier.append("class", "eFapsTableCellClear"));
}
if (uiCell.isFixedWidth()) {
if (firstCell) {
firstCell = false;
cell.add(AttributeModifier.append("class", "eFapsTableFirstCell eFapsTableCell"
+ " eFapsCellFixedWidth" + i));
} else {
cell.add(AttributeModifier.append("class", "eFapsTableCell eFapsCellFixedWidth" + i));
}
} else {
if (firstCell) {
firstCell = false;
cell.add(AttributeModifier.append("class", "eFapsTableFirstCell eFapsTableCell"
+ " eFapsCellWidth" + i));
} else {
cell.add(AttributeModifier.append("class", "eFapsTableCell eFapsCellWidth" + i));
}
}
i++;
cell.add(AttributeModifier.append("class", "eFapsSTBRWtmp"));
}
_item.add(SubElement.this.tree.newSubtree("subtree", model));
final RepeatingView hiddenRepeater = new RepeatingView("hiddenRepeater");
_item.add(hiddenRepeater);
for (final UIHiddenCell cell : strucBrws.getHidden()) {
hiddenRepeater.add(new LabelComponent(hiddenRepeater.newChildId(), cell.getCellValue()));
}
_item.add(new RowId("rowId", Model.of((AbstractInstanceObject) strucBrws)));
}
@Override
public boolean isVisible()
{
boolean ret = true;
final UIStructurBrowser t = getModel().getObject();
if (t != null) {
// roots always visible
ret = this.tree.getState(t) == State.EXPANDED;
}
return ret;
}
/**
* Iterator implementation for the SubElement.
*/
private final class ModelIterator
implements Iterator>
{
/**
* children.
*/
private Iterator extends UIStructurBrowser> children;
/**
* Constructor.
*/
public ModelIterator()
{
final UIStructurBrowser t = getModel().getObject();
if (t == null) {
this.children = SubElement.this.tree.getProvider().getRoots();
} else {
this.children = SubElement.this.tree.getProvider().getChildren(t);
}
}
/**
* not implemented.
*/
public void remove()
{
throw new UnsupportedOperationException();
}
/**
* has this iterator a further element.
* @return true if next element
*/
public boolean hasNext()
{
return this.children.hasNext();
}
/**
* Get the next element.
* @return Model
*/
public IModel next()
{
return SubElement.this.tree.getProvider().model(this.children.next());
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy