Search in sources :

Example 6 with NamedIdentifier

use of org.apache.sis.referencing.NamedIdentifier in project sis by apache.

the class CustomAttribute method quality.

/**
 * Evaluates the quality of this attribute with a custom rule.
 */
@Override
public DataQuality quality() {
    final DefaultDataQuality quality = (DefaultDataQuality) super.quality();
    final DefaultDomainConsistency report = new DefaultDomainConsistency();
    final DefaultQuantitativeResult result = new DefaultQuantitativeResult();
    result.setErrorStatistic(new SimpleInternationalString(ADDITIONAL_QUALITY_INFO));
    report.setMeasureIdentification(new NamedIdentifier(getName()));
    report.setResults(singleton(result));
    quality.setReports(singleton(report));
    return quality;
}
Also used : DefaultDomainConsistency(org.apache.sis.metadata.iso.quality.DefaultDomainConsistency) SimpleInternationalString(org.apache.sis.util.iso.SimpleInternationalString) NamedIdentifier(org.apache.sis.referencing.NamedIdentifier) DefaultDataQuality(org.apache.sis.metadata.iso.quality.DefaultDataQuality) DefaultQuantitativeResult(org.apache.sis.metadata.iso.quality.DefaultQuantitativeResult)

Example 7 with NamedIdentifier

use of org.apache.sis.referencing.NamedIdentifier in project sis by apache.

the class EPSGDataAccess method createProperties.

/**
 * Returns the name and aliases for the {@link IdentifiedObject} to construct.
 *
 * @param  table       the table on which a query has been executed.
 * @param  name        the name for the {@link IdentifiedObject} to construct.
 * @param  code        the EPSG code of the object to construct.
 * @param  remarks     remarks as a {@link String} or {@link InternationalString}, or {@code null} if none.
 * @param  deprecated  {@code true} if the object to create is deprecated.
 * @return the name together with a set of properties.
 */
@SuppressWarnings("ReturnOfCollectionOrArrayField")
private Map<String, Object> createProperties(final String table, String name, final Integer code, CharSequence remarks, final boolean deprecated) throws SQLException, FactoryDataException {
    /*
         * Search for aliases. Note that searching for the object code is not sufficient. We also need to check if the
         * record is really from the table we are looking for since different tables may have objects with the same ID.
         *
         * Some aliases are identical to the name except that some letters are replaced by their accented letters.
         * For example "Reseau Geodesique Francais" → "Réseau Géodésique Français". If we find such alias, replace
         * the name by the alias so we have proper display in user interface. Notes:
         *
         *   - WKT formatting will still be compliant with ISO 19162 because the WKT formatter replaces accented
         *     letters by ASCII ones.
         *   - We do not perform this replacement directly in our EPSG database because ASCII letters are more
         *     convenient for implementing accent-insensitive searches.
         */
    final List<GenericName> aliases = new ArrayList<>();
    try (ResultSet result = executeQuery("Alias", "SELECT OBJECT_TABLE_NAME, NAMING_SYSTEM_NAME, ALIAS" + " FROM [Alias] INNER JOIN [Naming System]" + " ON [Alias].NAMING_SYSTEM_CODE =" + " [Naming System].NAMING_SYSTEM_CODE" + " WHERE OBJECT_CODE = ?", code)) {
        while (result.next()) {
            if (tableMatches(table, result.getString(1))) {
                final String naming = getOptionalString(result, 2);
                final String alias = getString(code, result, 3);
                NameSpace ns = null;
                if (naming != null) {
                    ns = namingSystems.get(naming);
                    if (ns == null) {
                        ns = owner.nameFactory.createNameSpace(owner.nameFactory.createLocalName(null, naming), null);
                        namingSystems.put(naming, ns);
                    }
                }
                if (CharSequences.toASCII(alias).toString().equals(name)) {
                    name = alias;
                } else {
                    aliases.add(owner.nameFactory.createLocalName(ns, alias));
                }
            }
        }
    }
    /*
         * At this point we can fill the properties map.
         */
    properties.clear();
    GenericName gn = null;
    final Locale locale = getLocale();
    final Citation authority = owner.getAuthority();
    final InternationalString edition = authority.getEdition();
    final String version = (edition != null) ? edition.toString() : null;
    if (name != null) {
        gn = owner.nameFactory.createGenericName(namespace, Constants.EPSG, name);
        properties.put("name", gn);
        properties.put(NamedIdentifier.CODE_KEY, name);
        properties.put(NamedIdentifier.VERSION_KEY, version);
        properties.put(NamedIdentifier.AUTHORITY_KEY, authority);
        properties.put(AbstractIdentifiedObject.LOCALE_KEY, locale);
        final NamedIdentifier id = new NamedIdentifier(properties);
        properties.clear();
        properties.put(IdentifiedObject.NAME_KEY, id);
    }
    if (!aliases.isEmpty()) {
        properties.put(IdentifiedObject.ALIAS_KEY, aliases.toArray(new GenericName[aliases.size()]));
    }
    if (code != null) {
        final String codeString = code.toString();
        final ImmutableIdentifier identifier;
        if (deprecated) {
            final String replacedBy = getSupersession(table, code, locale);
            identifier = new DeprecatedCode(authority, Constants.EPSG, codeString, version, Character.isDigit(replacedBy.charAt(0)) ? replacedBy : null, Vocabulary.formatInternational(Vocabulary.Keys.SupersededBy_1, replacedBy));
            properties.put(AbstractIdentifiedObject.DEPRECATED_KEY, Boolean.TRUE);
        } else {
            identifier = new ImmutableIdentifier(authority, Constants.EPSG, codeString, version, (gn != null) ? gn.toInternationalString() : null);
        }
        properties.put(IdentifiedObject.IDENTIFIERS_KEY, identifier);
    }
    properties.put(IdentifiedObject.REMARKS_KEY, remarks);
    properties.put(AbstractIdentifiedObject.LOCALE_KEY, locale);
    properties.put(ReferencingServices.MT_FACTORY, owner.mtFactory);
    return properties;
}
Also used : Locale(java.util.Locale) GenericName(org.opengis.util.GenericName) InternationalString(org.opengis.util.InternationalString) SimpleInternationalString(org.apache.sis.util.iso.SimpleInternationalString) NamedIdentifier(org.apache.sis.referencing.NamedIdentifier) ArrayList(java.util.ArrayList) ResultSet(java.sql.ResultSet) NameSpace(org.opengis.util.NameSpace) DefaultNameSpace(org.apache.sis.util.iso.DefaultNameSpace) InternationalString(org.opengis.util.InternationalString) SimpleInternationalString(org.apache.sis.util.iso.SimpleInternationalString) Citation(org.opengis.metadata.citation.Citation) DefaultCitation(org.apache.sis.metadata.iso.citation.DefaultCitation) DeprecatedCode(org.apache.sis.internal.referencing.DeprecatedCode) ImmutableIdentifier(org.apache.sis.metadata.iso.ImmutableIdentifier)

Example 8 with NamedIdentifier

use of org.apache.sis.referencing.NamedIdentifier in project sis by apache.

the class MetadataTest method createHardCoded.

/**
 * Programmatically creates the metadata to marshall, or to compare against the unmarshalled metadata.
 *
 * @return the hard-coded representation of {@code "Metadata.xml"} content.
 */
private DefaultMetadata createHardCoded() {
    final DefaultMetadata metadata = new DefaultMetadata();
    metadata.setMetadataIdentifier(new DefaultIdentifier("Apache SIS/Metadata test"));
    metadata.setLanguages(singleton(Locale.ENGLISH));
    metadata.setCharacterSets(singleton(StandardCharsets.UTF_8));
    metadata.setMetadataScopes(singleton(new DefaultMetadataScope(ScopeCode.DATASET, "Common Data Index record")));
    metadata.setDateInfo(singleton(new DefaultCitationDate(TestUtilities.date("2009-01-01 04:00:00"), DateType.CREATION)));
    /*
         * Contact information for the author. The same party will be used for custodian and distributor,
         * with only the role changed. Note that we need to create an instance of the deprecated class,
         * because this is what will be unmarshalled from the XML document.
         */
    @SuppressWarnings("deprecation") final DefaultResponsibleParty author = new DefaultResponsibleParty(Role.AUTHOR);
    // Non-public SIS class.
    final Anchor country = new Anchor(URI.create("SDN:C320:2:FR"), "France");
    {
        final DefaultOnlineResource online = new DefaultOnlineResource(URI.create("http://www.ifremer.fr/sismer/"));
        online.setProtocol("http");
        final DefaultContact contact = new DefaultContact(online);
        contact.getIdentifierMap().putSpecialized(IdentifierSpace.ID, "IFREMER");
        contact.setPhones(Arrays.asList(telephone("+33 (0)2 xx.xx.xx.x6", "VOICE"), telephone("+33 (0)2 xx.xx.xx.x4", "FACSIMILE")));
        final DefaultAddress address = new DefaultAddress();
        address.setDeliveryPoints(singleton("Brest institute"));
        address.setCity(new SimpleInternationalString("Plouzane"));
        address.setPostalCode("29280");
        address.setCountry(country);
        address.setElectronicMailAddresses(singleton("xx@xx.fr"));
        contact.setAddresses(singleton(address));
        author.setParties(singleton(new DefaultOrganisation("Marine institutes", null, null, contact)));
        metadata.setContacts(singleton(author));
    }
    /*
         * Data indentification.
         */
    {
        final DefaultCitation citation = new DefaultCitation("90008411.ctd");
        citation.setAlternateTitles(singleton(new SimpleInternationalString("42292_5p_19900609195600")));
        citation.setDates(Arrays.asList(new DefaultCitationDate(TestUtilities.date("1990-06-04 22:00:00"), DateType.REVISION), new DefaultCitationDate(TestUtilities.date("1979-08-02 22:00:00"), DateType.CREATION)));
        {
            @SuppressWarnings("deprecation") final DefaultResponsibleParty originator = new DefaultResponsibleParty(Role.ORIGINATOR);
            final DefaultOnlineResource online = new DefaultOnlineResource(URI.create("http://www.com.univ-mrs.fr/LOB/"));
            online.setProtocol("http");
            final DefaultContact contact = new DefaultContact(online);
            contact.setPhones(Arrays.asList(telephone("+33 (0)4 xx.xx.xx.x5", "VOICE"), telephone("+33 (0)4 xx.xx.xx.x8", "FACSIMILE")));
            final DefaultAddress address = new DefaultAddress();
            address.setDeliveryPoints(singleton("Oceanology institute"));
            address.setCity(new SimpleInternationalString("Marseille"));
            address.setPostalCode("13288");
            address.setCountry(country);
            contact.setAddresses(singleton(address));
            originator.setParties(singleton(new DefaultOrganisation("Oceanology laboratory", null, null, contact)));
            citation.setCitedResponsibleParties(singleton(originator));
        }
        final DefaultDataIdentification identification = new DefaultDataIdentification(// Citation
        citation, // Abstract
        "CTD NEDIPROD VI 120", // Language,
        Locale.ENGLISH, // Topic category
        TopicCategory.OCEANS);
        {
            @SuppressWarnings("deprecation") final DefaultResponsibleParty custodian = new DefaultResponsibleParty((DefaultResponsibility) author);
            custodian.setRole(Role.CUSTODIAN);
            identification.setPointOfContacts(singleton(custodian));
        }
        /*
             * Data indentification / Keywords.
             */
        {
            final DefaultKeywords keyword = new DefaultKeywords(new Anchor(URI.create("SDN:P021:35:ATTN"), "Transmittance and attenuance of the water column"));
            keyword.setType(KeywordType.THEME);
            final DefaultCitation thesaurus = new DefaultCitation("BODC Parameter Discovery Vocabulary");
            thesaurus.setAlternateTitles(singleton(new SimpleInternationalString("P021")));
            thesaurus.setDates(singleton(new DefaultCitationDate(TestUtilities.date("2008-11-25 23:00:00"), DateType.REVISION)));
            thesaurus.setEdition(new Anchor(URI.create("SDN:C371:1:35"), "35"));
            thesaurus.setIdentifiers(singleton(new ImmutableIdentifier(null, null, "http://www.seadatanet.org/urnurl/")));
            keyword.setThesaurusName(thesaurus);
            identification.setDescriptiveKeywords(singleton(keyword));
        }
        /*
             * Data indentification / Browse graphic.
             */
        {
            final DefaultBrowseGraphic g = new DefaultBrowseGraphic(URI.create("file:///thumbnail.png"));
            g.setFileDescription(new SimpleInternationalString("Arbitrary thumbnail for this test only."));
            identification.setGraphicOverviews(singleton(g));
        }
        /*
             * Data indentification / Resource constraint.
             */
        {
            final DefaultLegalConstraints constraint = new DefaultLegalConstraints();
            constraint.setAccessConstraints(singleton(Restriction.LICENSE));
            identification.setResourceConstraints(singleton(constraint));
        }
        /*
             * Data indentification / Aggregate information.
             */
        {
            @SuppressWarnings("deprecation") final DefaultAggregateInformation aggregateInfo = new DefaultAggregateInformation();
            final DefaultCitation name = new DefaultCitation("MEDIPROD VI");
            name.setAlternateTitles(singleton(new SimpleInternationalString("90008411")));
            name.setDates(singleton(new DefaultCitationDate(TestUtilities.date("1990-06-04 22:00:00"), DateType.REVISION)));
            aggregateInfo.setName(name);
            aggregateInfo.setInitiativeType(InitiativeType.CAMPAIGN);
            // There is a typo ("WORD" → "WORK"), but we have to use the wrong spelling for this branch.
            aggregateInfo.setAssociationType(AssociationType.LARGER_WORD_CITATION);
            identification.setAggregationInfo(singleton(aggregateInfo));
        }
        /*
             * Data indentification / Extent.
             */
        {
            final DefaultCoordinateSystemAxis axis = new DefaultCoordinateSystemAxis(singletonMap(DefaultCoordinateSystemAxis.NAME_KEY, new NamedIdentifier(null, "Depth")), "d", AxisDirection.DOWN, Units.METRE);
            final DefaultVerticalCS cs = new DefaultVerticalCS(singletonMap(DefaultVerticalCS.NAME_KEY, new NamedIdentifier(null, "Depth")), axis);
            final DefaultVerticalDatum datum = new DefaultVerticalDatum(singletonMap(DefaultVerticalDatum.NAME_KEY, new NamedIdentifier(null, "D28")), VerticalDatumType.OTHER_SURFACE);
            final DefaultVerticalCRS vcrs = new DefaultVerticalCRS(singletonMap(DefaultVerticalCRS.NAME_KEY, new NamedIdentifier(null, "Depth below D28")), datum, cs);
            final DefaultTemporalExtent temporal = new DefaultTemporalExtent();
            setTemporalBounds(temporal, "1990-06-05", "1990-07-02");
            identification.setExtents(singleton(new DefaultExtent(null, new DefaultGeographicBoundingBox(1.1667, 1.1667, 36.6, 36.6), new DefaultVerticalExtent(Double.NaN, Double.NaN, vcrs), temporal)));
        }
        /*
             * Data identification / Environmental description and Supplemental information.
             */
        {
            identification.setEnvironmentDescription(new SimpleInternationalString("Possibly cloudy."));
            identification.setSupplementalInformation(new SimpleInternationalString("This metadata has been modified with dummy values."));
        }
        metadata.setIdentificationInfo(singleton(identification));
    }
    /*
         * Information about spatial representation.
         */
    {
        final DefaultVectorSpatialRepresentation rep = new DefaultVectorSpatialRepresentation();
        final DefaultGeometricObjects geoObj = new DefaultGeometricObjects(GeometricObjectType.POINT);
        rep.setGeometricObjects(singleton(geoObj));
        metadata.setSpatialRepresentationInfo(singleton(rep));
    }
    /*
         * Information about Coordinate Reference System.
         */
    {
        final DefaultCitation citation = new DefaultCitation("A geographic coordinate reference frames");
        citation.setAlternateTitles(singleton(new SimpleInternationalString("L101")));
        citation.setIdentifiers(singleton(new ImmutableIdentifier(null, null, "http://www.seadatanet.org/urnurl/")));
        citation.setEdition(new Anchor(URI.create("SDN:C371:1:2"), "2"));
        metadata.setReferenceSystemInfo(singleton(new ReferenceSystemMetadata(new ImmutableIdentifier(citation, "L101", "EPSG:4326"))));
    }
    /*
         * Information about content.
         */
    {
        final DefaultImageDescription contentInfo = new DefaultImageDescription();
        contentInfo.setCloudCoverPercentage(50.0);
        metadata.setContentInfo(singleton(contentInfo));
    }
    /*
         * Extension to metadata.
         */
    {
        final DefaultMetadataExtensionInformation extensionInfo = new DefaultMetadataExtensionInformation();
        extensionInfo.setExtendedElementInformation(singleton(new DefaultExtendedElementInformation(// Name
        "SDN:EDMO::", // Definition
        "http://www.seadatanet.org/urnurl/", // Condition
        null, // Data type
        Datatype.CODE_LIST, // Parent entity
        "SeaDataNet", // Rule
        null, // Source
        null)));
        metadata.setMetadataExtensionInfo(singleton(extensionInfo));
    }
    /*
         * Distribution information.
         */
    {
        @SuppressWarnings("deprecation") final DefaultResponsibleParty distributor = new DefaultResponsibleParty((DefaultResponsibility) author);
        final DefaultDistribution distributionInfo = new DefaultDistribution();
        distributor.setRole(Role.DISTRIBUTOR);
        distributionInfo.setDistributors(singleton(new DefaultDistributor(distributor)));
        final DefaultFormat format = new DefaultFormat();
        final DefaultCitation specification = new DefaultCitation();
        specification.setAlternateTitles(singleton(new Anchor(URI.create("SDN:L241:1:MEDATLAS"), "MEDATLAS ASCII")));
        specification.setEdition(new SimpleInternationalString("1.0"));
        format.setFormatSpecificationCitation(specification);
        distributionInfo.setDistributionFormats(singleton(format));
        final DefaultDigitalTransferOptions transfer = new DefaultDigitalTransferOptions();
        transfer.setTransferSize(2.431640625);
        final DefaultOnlineResource onlines = new DefaultOnlineResource(URI.create("http://www.ifremer.fr/data/something"));
        onlines.setDescription(new SimpleInternationalString("CTDF02"));
        onlines.setFunction(OnLineFunction.DOWNLOAD);
        onlines.setProtocol("http");
        transfer.setOnLines(singleton(onlines));
        distributionInfo.setTransferOptions(singleton(transfer));
        metadata.setDistributionInfo(distributionInfo);
    }
    return metadata;
}
Also used : DefaultVerticalCS(org.apache.sis.referencing.cs.DefaultVerticalCS) NamedIdentifier(org.apache.sis.referencing.NamedIdentifier) DefaultCoordinateSystemAxis(org.apache.sis.referencing.cs.DefaultCoordinateSystemAxis) Anchor(org.apache.sis.internal.jaxb.gcx.Anchor) DefaultVerticalCRS(org.apache.sis.referencing.crs.DefaultVerticalCRS) SimpleInternationalString(org.apache.sis.util.iso.SimpleInternationalString) ReferenceSystemMetadata(org.apache.sis.internal.jaxb.metadata.replace.ReferenceSystemMetadata) DefaultVerticalDatum(org.apache.sis.referencing.datum.DefaultVerticalDatum)

Example 9 with NamedIdentifier

use of org.apache.sis.referencing.NamedIdentifier in project sis by apache.

the class AssociationRoleBuilderTest method testMetadata.

/**
 * Tests the name, designation, definition, description and cardinality associated to the role.
 */
@Test
public void testMetadata() {
    final FeatureTypeBuilder ftb = new FeatureTypeBuilder().setName("Highway");
    final NamedIdentifier target = new NamedIdentifier(null, "Bridge");
    final AssociationRoleBuilder builder = new AssociationRoleBuilder(ftb, null, target).setDescription("Bridges on the highway").setDefinition("A definition").setDesignation("A designation").setMaximumOccurs(2).setMinimumOccurs(1);
    final DefaultAssociationRole role = builder.build();
    assertEquals("minimumOccurs", 1, role.getMinimumOccurs());
    assertEquals("maximumOccurs", 2, role.getMaximumOccurs());
    assertEquals("designation", new SimpleInternationalString("A designation"), role.getDesignation());
    assertEquals("definition", new SimpleInternationalString("A definition"), role.getDefinition());
    assertEquals("description", new SimpleInternationalString("Bridges on the highway"), role.getDescription());
}
Also used : DefaultAssociationRole(org.apache.sis.feature.DefaultAssociationRole) SimpleInternationalString(org.apache.sis.util.iso.SimpleInternationalString) NamedIdentifier(org.apache.sis.referencing.NamedIdentifier) Test(org.junit.Test)

Example 10 with NamedIdentifier

use of org.apache.sis.referencing.NamedIdentifier in project sis by apache.

the class Validator method addViolationReport.

/**
 * Adds a report for a constraint violation. If the given {@code report} is {@code null}, then this method creates
 * a new {@link DefaultDomainConsistency} instance with the measure identification set to the property name.
 *
 * <div class="note"><b>Note:</b>
 * setting {@code measureIdentification} to the property name may look like a departure from ISO intent,
 * since the former should be an identification of the <em>quality measurement</em> rather then the measure itself.
 * (setting {@code measureDescription} to {@code type.getDescription()} would probably be wrong for that reason).
 * However {@code measureIdentification} is only an identifier, not a full description of the quality measurement
 * We are not strictly forbidden to use the same identifier for both the quality measurement than the measurement
 * itself. However strictly speaking, maybe we should use a different scope.</div>
 *
 * @param  report       where to add the result, or {@code null} if not yet created.
 * @param  type         description of the property for which a constraint violation has been found.
 * @param  explanation  explanation of the constraint violation.
 * @return the {@code report}, or a new report if {@code report} was null.
 */
private AbstractElement addViolationReport(AbstractElement report, final AbstractIdentifiedType type, final InternationalString explanation) {
    if (report == null) {
        final GenericName name = type.getName();
        report = new DefaultDomainConsistency();
        // Do not invoke report.setMeasureDescription(type.getDescription()) - see above javadoc.
        report.setMeasureIdentification(name instanceof Identifier ? (Identifier) name : new NamedIdentifier(name));
        report.setEvaluationMethodType(EvaluationMethodType.DIRECT_INTERNAL);
        quality.getReports().add(report);
    }
    report.getResults().add(new DefaultConformanceResult(null, explanation, false));
    return report;
}
Also used : GenericName(org.opengis.util.GenericName) DefaultDomainConsistency(org.apache.sis.metadata.iso.quality.DefaultDomainConsistency) NamedIdentifier(org.apache.sis.referencing.NamedIdentifier) Identifier(org.opengis.metadata.Identifier) NamedIdentifier(org.apache.sis.referencing.NamedIdentifier) DefaultConformanceResult(org.apache.sis.metadata.iso.quality.DefaultConformanceResult)

Aggregations

NamedIdentifier (org.apache.sis.referencing.NamedIdentifier)13 HashMap (java.util.HashMap)6 SimpleInternationalString (org.apache.sis.util.iso.SimpleInternationalString)5 Citation (org.opengis.metadata.citation.Citation)3 IdentifiedObject (org.opengis.referencing.IdentifiedObject)3 DefaultDomainConsistency (org.apache.sis.metadata.iso.quality.DefaultDomainConsistency)2 Test (org.junit.Test)2 Identifier (org.opengis.metadata.Identifier)2 GenericName (org.opengis.util.GenericName)2 InternationalString (org.opengis.util.InternationalString)2 ResultSet (java.sql.ResultSet)1 ArrayList (java.util.ArrayList)1 Locale (java.util.Locale)1 LogRecord (java.util.logging.LogRecord)1 SimpleFormatter (java.util.logging.SimpleFormatter)1 DefaultAssociationRole (org.apache.sis.feature.DefaultAssociationRole)1 Anchor (org.apache.sis.internal.jaxb.gcx.Anchor)1 ReferenceSystemMetadata (org.apache.sis.internal.jaxb.metadata.replace.ReferenceSystemMetadata)1 DeprecatedCode (org.apache.sis.internal.referencing.DeprecatedCode)1 NilReferencingObject (org.apache.sis.internal.referencing.NilReferencingObject)1