blob: e0a27953cc67ed4f1524af873b63ed87906fdbe5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 Sybase, Inc. and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http:// www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Sybase, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.pagedesigner.jsf.ui.commands.jsfhtml;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.viewers.ISelection;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.eclipse.jst.pagedesigner.commands.DesignerCommand;
import org.eclipse.jst.pagedesigner.jsf.core.dom.JSFDOMUtil;
import org.eclipse.jst.pagedesigner.utils.DOMUtil;
import org.eclipse.jst.pagedesigner.viewer.IHTMLGraphicalViewer;
/**
* Remove a row from panel grid
*
* @author mengbo
* @version 1.5
*/
public class PanelGridDeleteRowCommand extends DesignerCommand
{
Element _panelGridEle;
int _rowIndex;
/**
* @param viewer
* @param panelGrid
* @param index
*/
public PanelGridDeleteRowCommand(IHTMLGraphicalViewer viewer, Element panelGrid, int index)
{
super(CommandResources.getString("PanelGridDeleteRowCommand.Label.DeleteRow"), viewer); //$NON-NLS-1$
this._panelGridEle = panelGrid;
this._rowIndex = index;
}
/* (non-Javadoc)
* @see org.eclipse.jst.pagedesigner.commands.DesignerCommand#doExecute()
*/
protected void doExecute()
{
// Remove the row from panelGrid is a little complex. Since this row could
// be header or footer.
boolean hasHeaderRow = (JSFDOMUtil.findFacet(_panelGridEle, "header") != null); //$NON-NLS-1$
int columns = DOMUtil.getIntAttributeIgnoreCase(_panelGridEle, "columns", 1); //$NON-NLS-1$
if (columns < 1)
{
columns = 1;
}
List children = JSFDOMUtil.getUIComponentChildren(_panelGridEle);
int numRows = (children.size() + columns - 1) / columns;
int removeRow = _rowIndex;
if (hasHeaderRow)
{
if (removeRow == 0)
{
// remove the header row.
removeHeader();
formatNode(_panelGridEle);
return;
}
removeRow--;
}
if (removeRow < numRows)
{
List toRemove = new ArrayList();
int max = columns * (removeRow + 1);
max = Math.min(max, children.size());
for (int i = (columns * removeRow); i < max; i++)
{
toRemove.add(children.get(i));
}
for (int i = 0, size = toRemove.size(); i < size; i++)
{
_panelGridEle.removeChild((Node) toRemove.get(i));
}
formatNode(_panelGridEle);
}
else
{
// must be footer.
removeFooter();
formatNode(_panelGridEle);
}
}
/* (non-Javadoc)
* @see org.eclipse.gef.commands.Command#canExecute()
*/
public boolean canExecute()
{
if (this._rowIndex < 0)
{
return false;
}
return super.canExecute();
}
/**
*
*/
private void removeFooter()
{
Element ele = JSFDOMUtil.findFacet(_panelGridEle, "footer"); //$NON-NLS-1$
if (ele != null)
{
_panelGridEle.removeChild(ele);
}
}
/**
*
*/
private void removeHeader()
{
Element ele = JSFDOMUtil.findFacet(_panelGridEle, "header"); //$NON-NLS-1$
if (ele != null)
{
_panelGridEle.removeChild(ele);
}
}
/* (non-Javadoc)
* @see org.eclipse.jst.pagedesigner.commands.DesignerCommand#getAfterCommandDesignerSelection()
*/
protected ISelection getAfterCommandDesignerSelection()
{
return this.toDesignSelection(this._panelGridEle);
}
}