blob: 42159aa96ae9da68016870c0aaac8e3d695a8699 [file] [log] [blame]
/*
* Copyright (c) 2013, JoshuaTree Software. All rights reserved.
*/
package us.jts.commander.panel;
import com.inmethod.grid.IGridColumn;
import com.inmethod.grid.SizeUnit;
import com.inmethod.grid.column.PropertyColumn;
import com.inmethod.grid.treegrid.TreeGrid;
import org.apache.log4j.Logger;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.attributes.AjaxCallListener;
import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
import org.apache.wicket.event.IEvent;
import org.apache.wicket.markup.html.form.FormComponentPanel;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import us.jts.commander.GlobalIds;
import us.jts.commander.GlobalUtils;
import us.jts.commander.PwPolicyListModel;
import us.jts.commander.SaveModelEvent;
import us.jts.commander.SelectModelEvent;
import us.jts.fortress.rbac.FortEntity;
import us.jts.fortress.rbac.PwPolicy;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.Model;
import us.jts.fortress.util.attr.VUtil;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* User: Shawn McKinney
* Date: 6/12/13
*/
public class PwPolicyListPanel extends FormComponentPanel
{
private static final Logger log = Logger.getLogger(PwPolicyListPanel.class.getName());
private Form listForm;
private DefaultTreeModel treeModel;
private DefaultMutableTreeNode node;
private TreeGrid<DefaultTreeModel, DefaultMutableTreeNode, String> grid;
private DefaultMutableTreeNode rootNode;
private String searchVal;
public PwPolicyListPanel(String id)
{
super(id);
PwPolicyListModel policyListModel = new PwPolicyListModel(new PwPolicy(""), GlobalUtils.getRbacSession( this ) );
setDefaultModel(policyListModel);
List<IGridColumn<DefaultTreeModel, DefaultMutableTreeNode, String>> columns =
new ArrayList<IGridColumn<DefaultTreeModel, DefaultMutableTreeNode, String>>();
columns.add(new PropertyColumn<DefaultTreeModel, DefaultMutableTreeNode, String, String>(
Model.of("Policy Name"), "userObject.name"));
PropertyColumn minAge = new PropertyColumn<DefaultTreeModel, DefaultMutableTreeNode, String, String>(
Model.of("Min Age"), "userObject.minAge");
minAge.setInitialSize(60);
columns.add(minAge);
PropertyColumn maxAge = new PropertyColumn<DefaultTreeModel, DefaultMutableTreeNode, String, String>(
Model.of("Max Age"), "userObject.maxAge");
maxAge.setInitialSize(75);
columns.add(maxAge);
PropertyColumn inHistory = new PropertyColumn<DefaultTreeModel, DefaultMutableTreeNode, String, String>(
Model.of("History"), "userObject.inHistory");
inHistory.setInitialSize(50);
columns.add(inHistory);
PropertyColumn minLength = new PropertyColumn<DefaultTreeModel, DefaultMutableTreeNode, String, String>(
Model.of("Min Len"), "userObject.minLength");
minLength.setInitialSize(60);
columns.add(minLength);
PropertyColumn expireWarning = new PropertyColumn<DefaultTreeModel, DefaultMutableTreeNode, String, String>(
Model.of("Expire Warning"), "userObject.expireWarning");
expireWarning.setInitialSize(115);
columns.add(expireWarning);
PropertyColumn graceLoginLimit = new PropertyColumn<DefaultTreeModel, DefaultMutableTreeNode, String, String>(
Model.of("Grace"), "userObject.graceLoginLimit");
graceLoginLimit.setInitialSize(50);
columns.add(graceLoginLimit);
PropertyColumn lockout = new PropertyColumn<DefaultTreeModel, DefaultMutableTreeNode, String, String>(
Model.of("Lockout"), "userObject.lockout");
lockout.setInitialSize(60);
columns.add(lockout);
PropertyColumn lockoutDuration = new PropertyColumn<DefaultTreeModel, DefaultMutableTreeNode, String, String>(
Model.of("Lockout Duration"), "userObject.lockoutDuration");
lockoutDuration.setInitialSize(125);
columns.add(lockoutDuration);
PropertyColumn maxFailure = new PropertyColumn<DefaultTreeModel, DefaultMutableTreeNode, String, String>(
Model.of("Max Failure"), "userObject.maxFailure");
maxFailure.setInitialSize(80);
columns.add(maxFailure);
PropertyColumn failureCountInterval = new PropertyColumn<DefaultTreeModel, DefaultMutableTreeNode, String, String>(
Model.of("Interval"), "userObject.failureCountInterval");
failureCountInterval.setInitialSize(60);
columns.add(failureCountInterval);
PropertyColumn mustChange = new PropertyColumn<DefaultTreeModel, DefaultMutableTreeNode, String, String>(
Model.of("Must Change"), "userObject.mustChange");
mustChange.setInitialSize(90);
columns.add(mustChange);
PropertyColumn allowUserChange = new PropertyColumn<DefaultTreeModel, DefaultMutableTreeNode, String, String>(
Model.of("Allow Change"), "userObject.allowUserChange");
allowUserChange.setInitialSize(95);
columns.add(allowUserChange);
PropertyColumn safeModify = new PropertyColumn<DefaultTreeModel, DefaultMutableTreeNode, String, String>(
Model.of("Safe Modify"), "userObject.safeModify");
safeModify.setInitialSize(90);
columns.add(safeModify);
/*
PropertyColumn checkQuality = new PropertyColumn<DefaultTreeModel, DefaultMutableTreeNode, String, String>(
Model.of("Check Quality"), "userObject.checkQuality");
checkQuality.setInitialSize(100);
columns.add(checkQuality);
*/
List<PwPolicy> policies = (List<PwPolicy>) getDefaultModel().getObject();
treeModel = createTreeModel(policies);
grid = new TreeGrid<DefaultTreeModel, DefaultMutableTreeNode, String>("policytreegrid", treeModel, columns)
{
@Override
public void selectItem(IModel itemModel, boolean selected)
{
node = (DefaultMutableTreeNode) itemModel.getObject();
if(!node.isRoot())
{
PwPolicy policy = (PwPolicy) node.getUserObject();
log.debug("TreeGrid.addGrid.selectItem selected policy =" + policy.getName());
if (super.isItemSelected(itemModel))
{
log.debug("TreeGrid.addGrid.selectItem item is selected");
super.selectItem(itemModel, false);
}
else
{
super.selectItem(itemModel, true);
SelectModelEvent.send(getPage(), this, policy);
}
}
}
};
grid.setContentHeight(50, SizeUnit.EM);
grid.setAllowSelectMultiple(false);
grid.setClickRowToSelect(true);
grid.setClickRowToDeselect(false);
grid.setSelectToEdit(false);
// expand the root node
grid.getTreeState().expandNode((TreeNode) treeModel.getRoot());
this.listForm = new Form("form");
this.listForm.add(grid);
grid.setOutputMarkupId(true);
TextField searchValFld = new TextField(GlobalIds.SEARCH_VAL, new PropertyModel<String>(this, GlobalIds.SEARCH_VAL));
this.listForm.add(searchValFld);
this.listForm.add(new AjaxSubmitLink(GlobalIds.SEARCH)
{
@Override
protected void onSubmit(AjaxRequestTarget target, Form form)
{
log.debug(".search onSubmit");
info("Searching Policies...");
if(!VUtil.isNotNullOrEmpty(searchVal))
{
searchVal = "";
}
PwPolicy srchPolicy = new PwPolicy(searchVal);
setDefaultModel(new PwPolicyListModel(srchPolicy, GlobalUtils.getRbacSession( this )));
treeModel.reload();
rootNode.removeAllChildren();
List<PwPolicy> policies = (List<PwPolicy>) getDefaultModelObject();
if(VUtil.isNotNullOrEmpty(policies))
{
for (PwPolicy policy : policies)
rootNode.add(new DefaultMutableTreeNode(policy));
info("Search returned " + policies.size() + " matching objects");
}
else
{
info("No matching objects found");
}
target.add(grid);
}
@Override
public void onError(AjaxRequestTarget target, Form form)
{
log.warn(".search.onError");
target.add();
}
@Override
protected void updateAjaxAttributes( AjaxRequestAttributes attributes )
{
super.updateAjaxAttributes( attributes );
AjaxCallListener ajaxCallListener = new AjaxCallListener()
{
@Override
public CharSequence getFailureHandler( Component component )
{
return GlobalIds.WINDOW_LOCATION_REPLACE_COMMANDER_HOME_HTML;
}
};
attributes.getAjaxCallListeners().add( ajaxCallListener );
}
});
add(this.listForm);
}
@Override
public void onEvent(IEvent event)
{
if (event.getPayload() instanceof SaveModelEvent)
{
SaveModelEvent modelEvent = (SaveModelEvent) event.getPayload();
switch(modelEvent.getOperation())
{
case ADD:
add(modelEvent.getEntity());
break;
case UPDATE:
modelChanged();
break;
case DELETE:
prune();
break;
default:
break;
}
AjaxRequestTarget target = ((SaveModelEvent) event.getPayload()).getAjaxRequestTarget();
target.add(grid);
log.debug(".onEvent SaveModelEvent: " + target.toString());
}
}
private void removeSelectedItems(TreeGrid<DefaultTreeModel, DefaultMutableTreeNode, String> grid)
{
Collection<IModel<DefaultMutableTreeNode>> selected = grid.getSelectedItems();
for (IModel<DefaultMutableTreeNode> model : selected)
{
DefaultMutableTreeNode node = model.getObject();
treeModel.removeNodeFromParent(node);
PwPolicy policy = (PwPolicy) node.getUserObject();
log.debug(".removeSelectedItems policy node: " + policy.getName());
List<PwPolicy> policies = ((List<PwPolicy>) getDefaultModel().getObject());
policies.remove(policy.getName());
}
}
private DefaultTreeModel createTreeModel(List<PwPolicy> policies)
{
DefaultTreeModel model;
PwPolicy root = new PwPolicy();
//root.setName("Policies");
rootNode = new DefaultMutableTreeNode(root);
model = new DefaultTreeModel(rootNode);
if (policies == null)
log.debug("no Policies found");
else
{
log.debug("Policies found:" + policies.size());
for (PwPolicy policy : policies)
rootNode.add(new DefaultMutableTreeNode(policy));
}
return model;
}
public void add(FortEntity entity)
{
if (getDefaultModelObject() != null)
{
List<PwPolicy> policies = ((List<PwPolicy>) getDefaultModelObject());
policies.add((PwPolicy) entity);
treeModel.insertNodeInto(new DefaultMutableTreeNode(entity), rootNode, policies.size());
}
}
public void prune()
{
removeSelectedItems(grid);
}
}