blob: bd31fc6383a10cc0948ef236171de29e6c73aac4 [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.commands.single;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
/**
* This command is for change an single attribute of an IDOMElement. Normally
* used by the properties view.
*
* @author mengbo
*/
public class ChangeAttributeCommand extends SingleNodeCommand {
private IDOMElement _element;
private String _attrValue;
private String _attrName;
private Map _attributes;
private boolean _keepEmptyAttribute = false;
/**
*
* @param label
* @param node
* @param attrName
* @param attrValue
* if null means remove the specified attribute
*/
public ChangeAttributeCommand(String label, IDOMElement node,
String attrName, String attrValue) {
super(label, node);
_element = node;
_attrName = attrName;
_attrValue = attrValue;
_attributes = null;
}
/** TODO: can these two constructors be merged?
* @param label
* @param node
* @param attributes
*/
public ChangeAttributeCommand(String label, IDOMElement node, Map attributes) {
super(label, node);
_element = node;
_attributes = attributes;
_attrName = null;
_attrValue = null;
}
protected void doExecute() {
if (_attrName != null) {
updateElement(_attrName, _attrValue);
} else if (_attributes != null) {
for (Iterator iterator = _attributes.keySet().iterator(); iterator
.hasNext();) {
String name = (String) iterator.next();
String value = (String) _attributes.get(name);
if (isSameValue(value, _element.getAttribute(name))) {
continue;
}
updateElement(name, value);
}
}
}
private void updateElement(String name, String value) {
if (_element.hasAttribute(name) && isEmptyString(value)
&& !_keepEmptyAttribute) {
_element.removeAttribute(name);
}
if (!isEmptyString(value) || _keepEmptyAttribute) {
_element.setAttribute(name, value);
}
}
private boolean isSameValue(String value1, String value2) {
value1 = value1 == null ? "" : value1;
value2 = value2 == null ? "" : value2;
return value1.equals(value2);
}
private boolean isEmptyString(String str) {
if (str == null || str.equals("")) {
return true;
}
return false;
}
/**
* @return Returns the keepEmptyAttribute.
*/
public boolean isKeepEmptyAttribute() {
return _keepEmptyAttribute;
}
/**
* @param keepEmptyAttribute
* The keepEmptyAttribute to set.
*/
public void setKeepEmptyAttribute(boolean keepEmptyAttribute) {
this._keepEmptyAttribute = keepEmptyAttribute;
}
}