/*
* Copyright 2013
*
* 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.
*/
package org.openntf.domino.design.impl;
import java.util.logging.Logger;
import org.openntf.domino.utils.xml.XMLNode;
import com.ibm.commons.util.StringUtil;
/**
* @author jgallagher
*
*/
public class DesignColumn implements org.openntf.domino.design.DesignColumn {
@SuppressWarnings("unused")
private static final Logger log_ = Logger.getLogger(DesignColumn.class.getName());
private XMLNode node_;
public DesignColumn(final XMLNode node) {
node_ = node;
}
@Override
public boolean isResizable() {
return node_.getAttribute("resizable").equals("true");
}
@Override
public void setResizable(final boolean resizable) {
node_.setAttribute("resizable", String.valueOf(resizable));
}
@Override
public boolean isSeparateMultipleValues() {
return node_.getAttribute("separatemultiplevalues").equals("true");
}
@Override
public void setSeparateMultipleValues(final boolean separateMultipleValues) {
node_.setAttribute("separatemultipleValues", String.valueOf(separateMultipleValues));
}
@Override
public boolean isSortNoAccent() {
return node_.getAttribute("sortnoaccent").equals("true");
}
@Override
public void setSortNoAccent(final boolean sortNoAccent) {
node_.setAttribute("sortnoaccent", String.valueOf(sortNoAccent));
}
@Override
public boolean isSortNoCase() {
return node_.getAttribute("sortnocase").equals("true");
}
@Override
public void setSortNoCase(final boolean sortNoCase) {
node_.setAttribute("sortnocase", String.valueOf(sortNoCase));
}
@Override
public boolean isShowAsLinks() {
return node_.getAttribute("showaslinks").equals("true");
}
@Override
public void setShowAsLinks(final boolean showAsLinks) {
node_.setAttribute("showaslinks", showAsLinks ? "true" : "false");
}
@Override
public String getItemName() {
return node_.getAttribute("itemname");
}
@Override
public void setItemName(final String itemName) {
node_.setAttribute("itemname", itemName);
if (StringUtil.isEmpty(getFormulaActual())) {
setFormula(itemName);
}
}
@Override
public SortOrder getSortOrder() {
String sort = node_.getAttribute("sort");
if (sort == null || sort.isEmpty()) {
return SortOrder.NONE;
}
return SortOrder.valueOf(sort.toUpperCase());
}
@Override
public void setSortOrder(final SortOrder sortOrder) {
node_.setAttribute("sort", sortOrder.toString().toLowerCase());
}
@Override
public String getTitle() {
XMLNode columnHeader = node_.selectSingleNode("columnheader");
if (columnHeader == null) {
return "";
}
return columnHeader.getAttribute("title");
}
@Override
public void setTitle(final String title) {
XMLNode columnHeader = node_.selectSingleNode("columnheader");
if (columnHeader == null) {
XMLNode firstChild = node_.getFirstChild();
if (firstChild != null) {
columnHeader = node_.insertChildElementBefore("columnheader", firstChild);
} else {
columnHeader = node_.addChildElement("columnheader");
}
}
columnHeader.setAttribute("title", title);
}
@Override
public String getFormula() {
String formulaActual = getFormulaActual();
return StringUtil.isEmpty(formulaActual) ? this.getItemName() : formulaActual;
}
// This is used so that the DXL can remain accurate - empty column formulas are illegal
protected String getFormulaActual() {
XMLNode formulaNode = node_.selectSingleNode("code[@event='value']/formula");
if (formulaNode != null) {
return formulaNode.getTextContent();
}
return "";
}
@Override
public void setFormula(final String formula) {
XMLNode formulaNode = node_.selectSingleNode("code[@event='value']/formula");
if (formulaNode != null) {
formulaNode.setTextContent(formula);
} else {
XMLNode code = node_.addChildElement("code");
code.setAttribute("event", "value");
formulaNode = code.addChildElement("formula");
formulaNode.setTextContent(formula);
}
}
}