blob: 42e620b54ca48b8f79440a34ed9584218fc5475f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.sis.test.mock;
import java.util.Arrays;
import java.util.Collection;
import java.io.Serializable;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import org.opengis.util.GenericName;
import org.opengis.referencing.IdentifiedObject;
import org.opengis.referencing.ReferenceIdentifier;
import org.apache.sis.internal.util.Strings;
import org.apache.sis.internal.util.CollectionsExt;
import org.apache.sis.internal.jaxb.gco.GO_GenericName;
/**
* A dummy implementation of {@link IdentifiedObject} with minimal XML (un)marshalling capability.
* This object can also be its own identifier, with a {@linkplain #getCode() code} defined in the
* {@code "test"} {@linkplain #getCodeSpace() codespace}.
*
* @author Martin Desruisseaux (Geomatys)
* @version 0.7
* @since 0.3
* @module
*/
@SuppressWarnings("serial")
@XmlRootElement(name = "IO_IdentifiedObject")
public strictfp class IdentifiedObjectMock implements IdentifiedObject, ReferenceIdentifier, Serializable {
/**
* The object name to be returned by {@link #getCode()}.
*/
private String code;
/**
* The alias to (un)marshal to XML
*/
@XmlElement
@XmlJavaTypeAdapter(GO_GenericName.class)
public GenericName alias;
/**
* Returns all properties defined in this object,
* for the convenience of {@link #equals(Object)} and {@link #hashCode()}.
*
* @return the properties to use in hash code computations and in comparisons.
*/
protected Object[] properties() {
return new Object[] {code, alias};
}
/**
* Creates an initially empty identified object.
* This constructor is required by JAXB.
*/
public IdentifiedObjectMock() {
}
/**
* Creates an identified object of the given name.
* Callers are free to assign new value to the {@link #alias} field directly.
*
* @param code the initial {@link #getCode()} value, or {@code null} if none.
*/
public IdentifiedObjectMock(final String code) {
this.code = code;
}
/**
* Creates an identified object of the given alias.
* Callers are free to assign new value to the {@link #alias} field directly.
*
* @param code the initial {@link #getCode()} value, or {@code null} if none.
* @param alias the initial {@link #alias} value, or {@code null} if none.
*/
public IdentifiedObjectMock(final String code, final GenericName alias) {
this.code = code;
this.alias = alias;
}
/**
* Returns the object name, or {@code null} if none.
*
* @return the name of this object, or {@code null} if none.
*/
@Override
public final ReferenceIdentifier getName() {
return (code != null) ? this : null;
}
/**
* Returns the code supplied at construction time, or {@code null} if none.
*
* @return the object code, or {@code null}.
*/
@Override
public final String getCode() {
return code;
}
/**
* Returns the codespace, which is fixed to {@code "test"}.
*
* @return {@code "test"}.
*/
@Override
public final String getCodeSpace() {
return "test";
}
/**
* Returns {@link #alias} in an unmodifiable collection, or an empty collection if the alias is null.
*
* @return {@link #alias} singleton or an empty collection.
*/
@Override
public final Collection<GenericName> getAlias() {
return CollectionsExt.singletonOrEmpty(alias);
}
/**
* Returns a string representation for debugging purpose.
*/
@Override
public final String toString() {
return Strings.bracket(getClass(), code);
}
/**
* Returns a hash code value for this object.
*
* @return a hash code value.
*/
@Override
public final int hashCode() {
return Arrays.hashCode(properties());
}
/**
* Compares this object with the given object for equality.
*
* @param object the other object, or {@code null}.
* @return {@code true} if both objects are equal.
*/
@Override
public final boolean equals(final Object object) {
if (object != null && object.getClass() == getClass()) {
return Arrays.equals(properties(), ((IdentifiedObjectMock) object).properties());
}
return false;
}
}