/*$************************************************************************************************
**
** $Id$
**
** $Source: /cvs/ctree/LiteGO1/src/jar/com/polexis/lite/spatialschema/geometry/primitive/SurfaceBoundaryImpl.java,v $
**
** Copyright (C) 2003 Open GIS Consortium, Inc. All Rights Reserved. http://www.opengis.org/Legal/
**
*************************************************************************************************/
package org.geotoolkit.geometry.isoonjts.spatialschema.geometry.primitive;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import org.geotoolkit.internal.jaxb.RingAdapter;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.geometry.primitive.Ring;
import org.opengis.geometry.primitive.SurfaceBoundary;
/**
* LiteGO1 implementation of the SurfaceBoundary interface.
* @module
*/
public class JTSSurfaceBoundary extends JTSPrimitiveBoundary implements SurfaceBoundary {
private static final long serialVersionUID = 8658623156496260842L;
@XmlElement(namespace = "http://www.opengis.net/gml")
@XmlJavaTypeAdapter(RingAdapter.class)
private Ring exterior;
@XmlElement(namespace = "http://www.opengis.net/gml")
@XmlJavaTypeAdapter(RingAdapter.class)
private List<Ring> interior;
public JTSSurfaceBoundary() {
}
public JTSSurfaceBoundary(final CoordinateReferenceSystem crs, final Ring exterior, final List<Ring> interior) {
super(crs);
this.exterior = exterior;
this.interior = interior;
}
public JTSSurfaceBoundary(final CoordinateReferenceSystem crs, final Ring exterior, final Ring [] interior) {
super(crs);
this.exterior = exterior;
if (interior != null) {
this.interior = new ArrayList( Arrays.asList( interior) );
}
}
/**
* Returns the exterior ring, or {@code null} if none.
*/
@Override
public Ring getExterior() {
return exterior;
}
/**
* Returns the interior rings.
*/
@Override
public List<Ring> getInteriors() {
return interior;
}
@Override
public boolean equals(final Object object) {
if (object == this)
return true;
if (object instanceof JTSSurfaceBoundary && super.equals(object)) {
JTSSurfaceBoundary that = (JTSSurfaceBoundary) object;
return Objects.equals(this.exterior, that.exterior) &&
Objects.equals(this.interior, that.interior);
}
return false;
}
@Override
public int hashCode() {
int hash = super.hashCode();
hash = 17 * hash + (this.exterior != null ? this.exterior.hashCode() : 0);
hash = 17 * hash + (this.interior != null ? this.interior.hashCode() : 0);
return hash;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder(super.toString());
if (interior != null) {
for (Ring r : interior) {
sb.append("interior:").append(r).append('\n');
}
}
if (exterior != null) {
sb.append("exterior:").append(exterior).append('\n');
}
return sb.toString();
}
}