/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (C) 2010, Geomatys
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotoolkit.processing;
import org.geotoolkit.process.ProcessDescriptor;
import org.opengis.metadata.lineage.Algorithm;
import java.util.Collections;
import java.util.Collection;
import org.apache.sis.util.ArgumentChecks;
import org.apache.sis.metadata.iso.citation.Citations;
import org.opengis.metadata.Identifier;
import org.opengis.metadata.citation.Citation;
import org.opengis.metadata.identification.Identification;
import org.opengis.parameter.ParameterDescriptorGroup;
import org.opengis.util.InternationalString;
import static org.apache.sis.util.ArgumentChecks.*;
/**
*
* @author Johann Sorel (Geomatys)
* @author Quentin Boileau (Geomatys)
* @module
*/
public abstract class AbstractProcessDescriptor implements ProcessDescriptor {
private static final String DEFAULT_VERSION = "1.0";
private final Identifier id;
private final InternationalString abs;
private final InternationalString displayName;
private final ParameterDescriptorGroup inputDesc;
private final ParameterDescriptorGroup outputdesc;
private final String version;
public AbstractProcessDescriptor(final String name, final Identification factoryId, final InternationalString abs,
final ParameterDescriptorGroup inputDesc, final ParameterDescriptorGroup outputdesc) {
this(new DerivateIdentifier(name, factoryId),abs,inputDesc,outputdesc);
}
public AbstractProcessDescriptor(final String name, final Identification factoryId, final InternationalString abs,
final InternationalString displayName, final ParameterDescriptorGroup inputDesc, final ParameterDescriptorGroup outputdesc) {
this(new DerivateIdentifier(name, factoryId), abs, displayName, inputDesc, outputdesc);
}
public AbstractProcessDescriptor(final Identifier id, final InternationalString abs,
final ParameterDescriptorGroup inputDesc, final ParameterDescriptorGroup outputdesc) {
this(id, abs, null, inputDesc, outputdesc);
}
public AbstractProcessDescriptor(final Identifier id, final InternationalString abs, final InternationalString displayName,
final ParameterDescriptorGroup inputDesc, final ParameterDescriptorGroup outputdesc) {
this(id, abs, displayName, inputDesc, outputdesc, DEFAULT_VERSION);
}
public AbstractProcessDescriptor(final Identifier id, final InternationalString abs, final InternationalString displayName,
final ParameterDescriptorGroup inputDesc, final ParameterDescriptorGroup outputdesc, final String version) {
ensureNonNull("id", id);
ensureNonNull("abs", abs);
ensureNonNull("inputDesc", inputDesc);
ensureNonNull("outputdesc", outputdesc);
this.id = id;
this.abs = abs;
this.displayName = displayName;
this.inputDesc = inputDesc;
this.outputdesc = outputdesc;
this.version = (version == null) ? DEFAULT_VERSION : version;
}
@Override
public Identifier getIdentifier() {
return id;
}
@Override
public InternationalString getDisplayName() {
return displayName;
}
@Override
public InternationalString getProcedureDescription() {
return abs;
}
@Override
public final ParameterDescriptorGroup getInputDescriptor() {
return inputDesc;
}
@Override
public final ParameterDescriptorGroup getOutputDescriptor() {
return outputdesc;
}
/**
* Get the process version. By default, return {@code 1.0}.
*
* @return The process version. By default {@code 1.0}.
*/
public String getVersion() {
return version;
}
@Override
public Collection<? extends Citation> getSoftwareReferences() {
return Collections.emptySet();
}
@Override
public Collection<? extends Citation> getDocumentations() {
return Collections.emptySet();
}
@Override
public InternationalString getRunTimeParameters() {
return null;
}
@Override
public Collection<? extends Algorithm> getAlgorithms() {
return Collections.emptySet();
}
protected static class DerivateIdentifier implements Identifier {
private final String code;
private final Identification factoryId;
public DerivateIdentifier(final String code, final Identification factoryId) {
ArgumentChecks.ensureNonNull("factoryId", factoryId);
ArgumentChecks.ensureNonNull("code", code);
this.code = code;
this.factoryId = factoryId;
}
@Override
public String getCode() {
return code;
}
@Override
public Citation getAuthority() {
return factoryId.getCitation();
}
@Override
public String getCodeSpace() {
return Citations.getIdentifier(getAuthority());
}
@Override
public String getVersion() {
return null;
}
@Override
public InternationalString getDescription() {
return null;
}
}
/**
* @return process authority and name. Also table of process inputs and outputs.
*/
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("Authority : ");
sb.append(id.getAuthority().getTitle().toString()).append("\n");
sb.append("Code : ");
sb.append(id.getCode()).append("\n");
sb.append("Display name : ");
sb.append(displayName).append("\n");
sb.append("Abstract : ");
sb.append(abs.toString()).append("\n");
sb.append(inputDesc.toString());
sb.append(outputdesc.toString());
return sb.toString();
}
}