blob: 3760ad3499e78116723d63f09d762bb350cc10ac [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.apache.cocoon.portal.pluto.om.common;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang.BooleanUtils;
import org.apache.pluto.om.common.Preference;
import org.apache.pluto.om.common.PreferenceCtrl;
import org.apache.pluto.util.StringUtils;
/**
*
*
* @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
*
* @version CVS $Id$
*/
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() {
// nothing to do
}
/**
* @see org.apache.pluto.om.common.Preference#getName()
*/
public String getName() {
return name;
}
/**
* @see org.apache.pluto.om.common.Preference#getValues()
*/
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(returnValue.get(i))) {
returnValue.set(i, null);
}
}
return returnValue.iterator();
}
/**
* @see org.apache.pluto.om.common.Preference#isReadOnly()
*/
public boolean isReadOnly() {
if (readOnly == null) {
return false;
}
return readOnly.booleanValue();
}
/**
* @see org.apache.pluto.om.common.Preference#isValueSet()
*/
public boolean isValueSet() {
return value != null;
}
// PreferenceCtrl implementation.
/**
* @see org.apache.pluto.om.common.PreferenceCtrl#setName(java.lang.String)
*/
public void setName(String name) {
this.name = name;
}
/**
* @see org.apache.pluto.om.common.PreferenceCtrl#setValues(java.util.List)
*/
public void setValues(java.util.List _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);
}
/**
* @see org.apache.pluto.om.common.PreferenceCtrl#setReadOnly(java.lang.String)
*/
public void setReadOnly(String readOnly) {
this.readOnly = BooleanUtils.toBooleanObject(readOnly);
}
// additional methods.
// internal methods only used by castor
public String getReadOnly() {
return BooleanUtils.toStringTrueFalse(BooleanUtils.toBoolean(readOnly));
}
public Collection getCastorValues() {
return value;
}
public void setCastorValues(Collection _value) {
if (value == null) {
value = new ArrayList();
} else {
value.clear();
}
value.addAll(_value);
}
protected List getClonedCastorValuesAsList() {
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();
}
}