/*
* Copyright (c) 2004-2011 Marco Maccaferri and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Marco Maccaferri - initial API and implementation
*/
package org.eclipsetrader.core.internal.charts.repository;
import java.util.UUID;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import org.eclipsetrader.core.charts.repository.IChartSection;
import org.eclipsetrader.core.charts.repository.IChartVisitor;
import org.eclipsetrader.core.charts.repository.IElementSection;
import org.eclipsetrader.core.charts.repository.ISecuritySection;
@XmlRootElement(name = "section")
public class ChartSection implements IChartSection {
@XmlAttribute(name = "id")
private String id;
@XmlAttribute(name = "name")
private String name;
@XmlElementRef
@XmlJavaTypeAdapter(ElementSectionAdapter.class)
private IElementSection[] indicators;
@XmlElement(name = "security")
@XmlJavaTypeAdapter(SecuritySectionAdapter.class)
private ISecuritySection[] securities;
public static class SecuritySectionAdapter extends XmlAdapter<SecuritySection, ISecuritySection> {
public SecuritySectionAdapter() {
}
/* (non-Javadoc)
* @see javax.xml.bind.annotation.adapters.XmlAdapter#marshal(java.lang.Object)
*/
@Override
public SecuritySection marshal(ISecuritySection v) throws Exception {
if (v instanceof SecuritySection) {
return (SecuritySection) v;
}
return v != null ? new SecuritySection(v) : null;
}
/* (non-Javadoc)
* @see javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal(java.lang.Object)
*/
@Override
public ISecuritySection unmarshal(SecuritySection v) throws Exception {
return v;
}
}
public ChartSection() {
}
public ChartSection(String id, String name) {
this.id = id;
this.name = name;
}
public ChartSection(String name) {
this.id = UUID.randomUUID().toString();
this.name = name;
}
public ChartSection(IChartSection section) {
this.id = section.getId();
this.name = section.getName();
this.indicators = section.getElements();
this.securities = section.getSecurities();
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.charts.repository.IChartSection#getId()
*/
@Override
@XmlTransient
public String getId() {
return id;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.charts.repository.IChartSection#getName()
*/
@Override
@XmlTransient
public String getName() {
return name;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.charts.repository.IChartSection#setName(java.lang.String)
*/
@Override
public void setName(String name) {
this.name = name;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.charts.repository.IElementSection#getElements()
*/
@Override
@XmlTransient
public IElementSection[] getElements() {
return indicators != null ? indicators : new IElementSection[0];
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.charts.repository.IChartSection#setElements(org.eclipsetrader.core.charts.repository.IElementSection[])
*/
@Override
public void setElements(IElementSection[] indicators) {
this.indicators = indicators;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.charts.repository.IChartSection#getSecurities()
*/
@Override
@XmlTransient
public ISecuritySection[] getSecurities() {
return securities != null ? securities : new ISecuritySection[0];
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.charts.repository.IChartSection#setSecurities(org.eclipsetrader.core.charts.repository.ISecuritySection[])
*/
@Override
public void setSecurities(ISecuritySection[] securities) {
this.securities = securities;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.charts.repository.IChartSection#accept(org.eclipsetrader.core.charts.repository.IChartVisitor)
*/
@Override
public void accept(IChartVisitor visitor) {
if (visitor.visit(this)) {
ISecuritySection[] s = getSecurities();
for (int i = 0; i < s.length; i++) {
s[i].accept(visitor);
}
IElementSection[] d = getElements();
for (int i = 0; i < d.length; i++) {
d[i].accept(visitor);
}
}
}
}