/*
* 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.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Logger;
import org.openntf.domino.Database;
import org.openntf.domino.Document;
import org.openntf.domino.design.DesignBaseNamed;
import org.openntf.formula.function.TextFunctions;
import com.ibm.commons.util.StringUtil;
/**
* A named DesignNote
*
* @author jgallagher
*
*/
@SuppressWarnings("serial")
public abstract class AbstractDesignBaseNamed extends AbstractDesignBase implements DesignBaseNamed {
@SuppressWarnings("unused")
private static final Logger log_ = Logger.getLogger(AbstractDesignBaseNamed.class.getName());
public AbstractDesignBaseNamed(final Database database) {
super(database);
}
public AbstractDesignBaseNamed(final Document document) {
super(document);
}
protected List<String> getTitlesRaw() {
String titles = getItemValueStrings(TITLE_ITEM, "|");
return Arrays.asList(titles.split("\\|"));
}
/*
* (non-Javadoc)
*
* @see org.openntf.domino.design.DesignBaseNamed#getAliases()
*/
@Override
public List<String> getAliases() {
String aliases;
switch (getDxlFormat(false)) {
case DXL:
aliases = getDxl().getAttribute("alias");
break;
default:
// Aliases are all the $TITLE values after the first
aliases = getItemValueStrings(TITLE_ITEM, "|");
aliases = TextFunctions.atRight(aliases, "|");
break;
}
if (StringUtil.isEmpty(aliases)) {
return new ArrayList<String>();
} else {
return Arrays.asList(aliases.split("\\|"));
}
}
/*
* (non-Javadoc)
*
* @see org.openntf.domino.design.DesignBaseNamed#getAlias()
*/
@Override
public String getAlias() {
switch (getDxlFormat(false)) {
case DXL:
return getDxl().getAttribute("alias");
default:
String[] aliases = getAliases().toArray(new String[] {});
return StringUtil.concatStrings(aliases, '|', false);
}
}
/*
* (non-Javadoc)
*
* @see org.openntf.domino.design.DesignBaseNamed#getName()
*/
@Override
public String getName() {
switch (getDxlFormat(false)) {
case DXL:
return getDocumentElement().getAttribute("name");
default:
String title = getItemValueString(TITLE_ITEM);
int pos = title.indexOf('|');
if (pos < 0)
return title;
return title.substring(0, pos);
}
}
/*
* (non-Javadoc)
*
* @see org.openntf.domino.design.DesignBaseNamed#setAlias(java.lang.String)
*/
@Override
public void setAlias(final String alias) {
switch (getDxlFormat(true)) {
case DXL:
getDocumentElement().setAttribute("alias", alias);
break;
default:
List<String> result = new ArrayList<String>(2);
result.add(getName());
result.add(alias);
setItemValue(TITLE_ITEM, result, FLAG_SIGN_SUMMARY);
break;
}
}
/*
* (non-Javadoc)
*
* @see org.openntf.domino.design.DesignBaseNamed#setAliases(java.lang.Iterable)
*/
@Override
public void setAliases(final Iterable<String> aliases) {
switch (getDxlFormat(true)) {
case DXL:
StringBuilder sb = new StringBuilder();
for (String alias : aliases) {
if (sb.length() > 0)
sb.append('|');
sb.append(alias);
}
getDocumentElement().setAttribute("alias", sb.toString());
break;
default:
List<String> titles = getItemValueStrings(TITLE_ITEM);
List<String> result = new ArrayList<String>(2);
result.add(titles.size() > 0 ? titles.get(0) : "");
for (String alias : aliases) {
result.add(alias);
}
setItemValue(TITLE_ITEM, titles, FLAG_SIGN_SUMMARY);
break;
}
}
/*
* (non-Javadoc)
*
* @see org.openntf.domino.design.DesignBaseNamed#setName(java.lang.String)
*/
@Override
public void setName(final String name) {
switch (getDxlFormat(true)) {
case DXL:
getDocumentElement().setAttribute("name", name);
break;
default:
List<String> result = getItemValueStrings(TITLE_ITEM);
if (result.size() > 0) {
result.set(0, name);
} else {
result.add(name);
}
setItemValue(TITLE_ITEM, result, FLAG_SIGN_SUMMARY);
break;
}
}
}