/* ******************************************************************************
* Copyright (c) 2006-2012 XMind Ltd. and others.
*
* This file is a part of XMind 3. XMind releases 3 and
* above are dual-licensed under the Eclipse Public License (EPL),
* which is available at http://www.eclipse.org/legal/epl-v10.html
* and the GNU Lesser General Public License (LGPL),
* which is available at http://www.gnu.org/licenses/lgpl.html
* See http://www.xmind.net/license.html for details.
*
* Contributors:
* XMind Ltd. - initial API and implementation
*******************************************************************************/
package org.xmind.core.internal.dom;
import static org.xmind.core.internal.dom.DOMConstants.ATTR_STYLE_ID;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.Text;
import org.xmind.core.ITextSpan;
import org.xmind.core.util.DOMUtils;
public class TextSpanImpl extends SpanImplBase implements ITextSpan {
private Text text;
private Element ele;
public TextSpanImpl(Node implementation, HtmlNotesContentImpl owner) {
super(implementation, owner);
if (implementation instanceof Text) {
this.text = (Text) implementation;
this.ele = null;
} else if (implementation instanceof Element) {
this.text = null;
this.ele = (Element) implementation;
}
}
public void setStyleId(String styleId) {
if (styleId == null) {
if (getImplementation() == text)
return;
if (text == null) {
text = ((WorkbookImpl) getOwnedWorkbook()).getImplementation()
.createTextNode(getTextContent());
}
WorkbookUtilsImpl.decreaseStyleRef(
getOwner().getRealizedWorkbook(), this);
Node oldImpl = getImplementation();
Node p = oldImpl.getParentNode();
if (p != null) {
p.replaceChild(oldImpl, text);
}
setImplementation(text);
getOwner().updateModifiedTime();
} else {
if (getImplementation() == ele) {
super.setStyleId(styleId);
} else {
if (ele == null) {
ele = ((WorkbookImpl) getOwnedWorkbook())
.getImplementation().createElement(
DOMConstants.TAG_SPAN);
ele.setTextContent(getTextContent());
}
Node oldImpl = getImplementation();
Node p = oldImpl.getParentNode();
if (p != null) {
p.replaceChild(ele, oldImpl);
}
setImplementation(ele);
DOMUtils.setAttribute(ele, ATTR_STYLE_ID, styleId);
WorkbookUtilsImpl.increaseStyleRef(getOwner()
.getRealizedWorkbook(), this);
getOwner().updateModifiedTime();
}
}
}
public String getTextContent() {
return getImplementation().getTextContent();
}
public void setTextContent(String textContent) {
getImplementation().setTextContent(textContent);
getOwner().updateModifiedTime();
}
}