X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=neutron-spi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fneutron%2Fspi%2FNeutronObject.java;h=255ff47b1af470c7ab3a1ed3ce69bc59a8e4109f;hb=fbab29a87a5a0e44161d5476a009d1eff580a6e5;hp=093cac1d4a9a7ce846afb8314147be5865cd59e7;hpb=3367ae01bd368de4baa4c12d22e56b5e82a81fe1;p=neutron.git diff --git a/neutron-spi/src/main/java/org/opendaylight/neutron/spi/NeutronObject.java b/neutron-spi/src/main/java/org/opendaylight/neutron/spi/NeutronObject.java index 093cac1d4..255ff47b1 100644 --- a/neutron-spi/src/main/java/org/opendaylight/neutron/spi/NeutronObject.java +++ b/neutron-spi/src/main/java/org/opendaylight/neutron/spi/NeutronObject.java @@ -9,36 +9,142 @@ package org.opendaylight.neutron.spi; -import java.io.Serializable; - +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; - +import javax.xml.bind.annotation.XmlTransient; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @XmlRootElement @XmlAccessorType(XmlAccessType.NONE) -public class NeutronObject extends Neutron_ID implements Serializable, INeutronObject { +public abstract class NeutronObject> extends NeutronID implements INeutronObject { + // T extends NeutronObject as 0th type argument. Used by extractFields() + private static final int NEUTRON_OBJECT_CLASS_TYPE_INDEX = 0; + + private static final Logger LOG = LoggerFactory.getLogger(NeutronObject.class); + private static final long serialVersionUID = 1L; - @XmlElement (name = "tenant_id") - String tenantID; + private String tenantID; + + @XmlElement(name = "project_id") + String projectID; + + @XmlElement(name = "revision_number") + Long revisionNumber; public NeutronObject() { - super(); } + @Override + @XmlElement(name = "tenant_id") + @XmlJavaTypeAdapter(EmptyStringAsNullAdapter.class) public String getTenantID() { return tenantID; } + @Override + @XmlElement(name = "tenant_id") + @XmlJavaTypeAdapter(EmptyStringAsNullAdapter.class) public void setTenantID(String tenantID) { this.tenantID = tenantID; } + @Override + @XmlTransient + public void setTenantID(Uuid tenantID) { + this.tenantID = tenantID.getValue().replace("-", ""); + } + @Override public String toString() { - return "NeutronObject [id=" + uuid + ", tenantID=" + tenantID + "]"; + return "NeutronObject [id=" + uuid + ", tenantID=" + getTenantID() + "]"; + } + + @Override + public void setProjectID(String projectID) { + this.projectID = projectID; + } + + @Override + public String getProjectID() { + return this.projectID; + } + + @Override + public Long getRevisionNumber() { + return revisionNumber; + } + + @Override + public void setRevisionNumber(Long revisionNumber) { + this.revisionNumber = revisionNumber; + } + + @Override + public void initDefaults() { + if (projectID != null && getTenantID() == null) { + setTenantID(projectID); + } + if (projectID == null && getTenantID() != null) { + projectID = getTenantID(); + } + } + + /** + * This method copies selected fields from the object and returns them + * as a new object, suitable for marshaling. + * + * @param fields + * List of attributes to be extracted + * @return an OpenStack Neutron object with only the selected fields + * populated + */ + + @Override + public T extractFields(List fields) { + ParameterizedType parameterizedType = (ParameterizedType) getClass().getGenericSuperclass(); + Type[] types = parameterizedType.getActualTypeArguments(); + @SuppressWarnings("unchecked") + Class cls = (Class) types[NEUTRON_OBJECT_CLASS_TYPE_INDEX]; + T ans; + try { + ans = cls.getDeclaredConstructor().newInstance(); + } catch (ReflectiveOperationException e) { + // should not happen. + throw new IllegalStateException(e); + } + for (String s : fields) { + if (!extractField(s, ans)) { + LOG.warn("Unknown {} {}.", cls.getSimpleName(), s); + } + } + return ans; + } + + protected boolean extractField(String field, T ans) { + switch (field) { + case "id": + ans.setID(this.getID()); + return true; + case "tenant_id": + ans.setTenantID(this.getTenantID()); + return true; + case "project_id": + ans.setProjectID(this.getProjectID()); + return true; + case "revision_number": + ans.setRevisionNumber(this.getRevisionNumber()); + return true; + default: + return false; + } } }