/*
* This file is protected by Copyright. Please refer to the COPYRIGHT file
* distributed with this source distribution.
*
* This file is part of REDHAWK core.
*
* REDHAWK core is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* REDHAWK core is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see http://www.gnu.org/licenses/.
*/
package org.ossie.properties;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.omg.CORBA.Any;
import org.omg.CORBA.AnySeqHelper;
import org.omg.CORBA.ORB;
public class StructSequenceProperty<T extends StructDef> extends AbstractSequenceProperty<T> {
protected Class<T> structClass;
public StructSequenceProperty(String id, String name, Class<T> structClass, List<T> value, Mode mode, Kind[] kinds) {
super(id, name, "struct", value, mode, null, kinds);
this.structClass = structClass;
}
@Deprecated
public StructSequenceProperty(String id, String name, Class<T> structClass, List<T> value, String mode, String[] kinds) {
this(id, name, structClass, value, Mode.get(mode), Kind.get(kinds));
}
@SafeVarargs
public static <E extends StructDef> List<E> asList(E... array) {
return new ArrayList<E>(Arrays.asList(array));
}
protected void insert(Any any, List<T> values) {
final Any[] array = new Any[values.size()];
for (int ii = 0; ii < values.size(); ++ii) {
array[ii] = values.get(ii).toAny();
}
AnySeqHelper.insert(any, array);
}
@Override
public String toString() {
return this.id + "/" + this.name;
}
protected List<T> extract(Any any) {
List<T> structVals = new ArrayList<T>();
for (final Any item : AnySeqHelper.extract(any)) {
T itemValue;
try {
itemValue = this.structClass.newInstance();
} catch (Exception ex) {
throw new IllegalArgumentException("Unable to construct new struct value: " + ex.getMessage(), ex);
}
itemValue.fromAny(item);
structVals.add(itemValue);
}
return structVals;
}
}