blob: b7eccc70d931d18d54d9a6882e2fd38c9b68d173 [file] [log] [blame]
/*
* Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0, which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package org.glassfish.jaxb.runtime.v2.runtime.property;
import org.glassfish.jaxb.runtime.api.AccessorException;
import org.glassfish.jaxb.runtime.v2.model.runtime.RuntimePropertyInfo;
import org.glassfish.jaxb.runtime.v2.runtime.JAXBContextImpl;
import org.glassfish.jaxb.runtime.v2.runtime.reflect.Accessor;
import org.glassfish.jaxb.runtime.v2.runtime.reflect.Lister;
/**
* {@link Property} implementation for multi-value properties
* (including arrays and collections.)
*
* @author Kohsuke Kawaguchi (kk@kohsuke.org)
*/
abstract class ArrayProperty<BeanT,ListT,ItemT> extends PropertyImpl<BeanT> {
protected final Accessor<BeanT,ListT> acc;
protected final Lister<BeanT,ListT,ItemT,Object> lister;
protected ArrayProperty(JAXBContextImpl context, RuntimePropertyInfo prop) {
super(context,prop);
assert prop.isCollection();
lister = Lister.create(
Utils.REFLECTION_NAVIGATOR.erasure(prop.getRawType()),prop.id(),prop.getAdapter());
assert lister!=null;
acc = prop.getAccessor().optimize(context);
assert acc!=null;
}
@Override
public void reset(BeanT o) throws AccessorException {
lister.reset(o,acc);
}
@Override
public final String getIdValue(BeanT bean) {
// mutli-value property can't be ID
return null;
}
}