blob: c51cb82d56f245b3df326cfb5bee7baae034f9fa [file] [log] [blame]
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Pluto", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
/*
*/
package org.apache.pluto.portalImpl.om.common.impl;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.apache.pluto.om.common.Preference;
import org.apache.pluto.om.common.PreferenceCtrl;
import org.apache.pluto.util.StringUtils;
public class PreferenceImpl implements Preference, PreferenceCtrl, java.io.Serializable {
private final static String NULL_VALUE = "#*!0_NULL_0!*#";
private final static String NULL_ARRAYENTRY = "#*!1_NULL_1!*#";
private String name;
private ArrayList value;
private Boolean readOnly;
public PreferenceImpl()
{
}
// Preference implementation.
public String getName()
{
return name;
}
public Iterator getValues()
{
// replace the NULL_VALUE String by NULL
if (value.contains(NULL_VALUE)) {
return null;
}
ArrayList returnValue = new ArrayList(value.size());
returnValue.addAll(value);
// replace all NULL_ARRAYENTRY Strings by NULL
for (int i = 0; i < returnValue.size(); i++) {
if (NULL_ARRAYENTRY.equals((String)returnValue.get(i))) {
returnValue.set(i, null);
}
}
return returnValue.iterator();
}
public boolean isReadOnly()
{
if (readOnly == null) {
return false;
}
return readOnly.booleanValue();
}
public boolean isValueSet() {
return value != null;
}
// PreferenceCtrl implementation.
public void setName(String name)
{
this.name = name;
}
public void setValues(Collection _value)
{
if (this.value == null) {
this.value = new ArrayList();
} else {
this.value.clear();
}
List addValue = null;
// replace NULL by the NULL_VALUE String
if (_value == null) {
addValue = new ArrayList(1);
addValue.add(NULL_VALUE);
} else {
// replace all NULL by the NULL_ARRAYENTRY String
addValue = new ArrayList(_value.size());
addValue.addAll(_value);
for (int i=0;i<addValue.size();i++) {
if (addValue.get(i) == null) {
addValue.set(i, NULL_ARRAYENTRY);
}
}
}
this.value.addAll(addValue);
}
public void setReadOnly(String readOnly)
{
this.readOnly = new Boolean(readOnly);
}
// additional methods.
// internal methods only used by castor
public String getReadOnly()
{
if (readOnly == null) {
return Boolean.FALSE.toString();
}
return readOnly.toString();
}
public Collection getCastorValues()
{
return value;
}
public void setCastorValues(Collection _value)
{
if (value == null) {
value = new ArrayList();
} else {
value.clear();
}
value.addAll(_value);
}
protected Collection getClonedCastorValuesAsCollection()
{
List returnValue = new ArrayList(value.size());
Iterator iter = value.iterator();
while (iter.hasNext()) {
String value = (String) iter.next();
returnValue.add(value);
}
return returnValue;
}
public String toString()
{
return toString(0);
}
public String toString(int indent)
{
StringBuffer buffer = new StringBuffer(50);
StringUtils.newLine(buffer,indent);
buffer.append(getClass().toString());
buffer.append(": name='");
buffer.append(name);
buffer.append("', value='");
if (value == null) {
buffer.append("null");
} else {
StringUtils.newLine(buffer,indent);
buffer.append("{");
Iterator iterator = value.iterator();
if (iterator.hasNext()) {
StringUtils.newLine(buffer,indent);
buffer.append((String)iterator.next());
}
while (iterator.hasNext()) {
StringUtils.indent(buffer,indent+2);
buffer.append((String)iterator.next());
}
StringUtils.newLine(buffer,indent);
buffer.append("}");
}
buffer.append("', isReadOnly='");
buffer.append(isReadOnly());
buffer.append("'");
return buffer.toString();
}
}