org.apache.jena.iri.impl.ViolationCodeInfo Maven / Gradle / Ivy
/*
* 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.jena.iri.impl;
import org.apache.jena.iri.ViolationCodes ;
public class ViolationCodeInfo extends IRIExamples implements ViolationCodes {
static abstract public class InSpec {
protected final Specification spec;
final private String uri;
public InSpec(String name, String uri) {
spec = Specification.get(name);
if (uri.equals(spec.getUri())) {
this.uri = null;
} else {
this.uri = uri;
}
}
public void add(ViolationCodeInfo info) {
spec.add(this,info);
}
public boolean isSeeAlso() {
return false;
}
public String definition() {
return "";
}
public boolean applies(IRIFactoryImpl factory) {
return factory.specs.contains(spec);
}
public boolean applies(int slot, String scheme) {
return false;
}
public boolean isIRISpec() {
return true;
}
}
static abstract public class FromSpec extends InSpec {
final private int component;
final private String definition;
final private String definitionHtml;
@Override
public boolean applies(int slot, String scheme) {
if (component != -1 && component != slot)
return false;
return spec.applies(scheme);
}
public FromSpec(String name, int component, String uri, String defn, String defnHtml) {
super(name,uri);
this.component = component;
definition = defn;
// TODO: definitions of schemes etc.
// if (definition == null)
// System.err.println(name);
definitionHtml = defnHtml;
}
@Override
public String definition() {
return "[[ " + definition + " ]]";
}
}
static public class FromSpec_other extends FromSpec {
public FromSpec_other(String name, int component, String uri, String defn, String defnHtml) {
super(name,component,uri,defn,defnHtml);
}
}
static public class FromSpec_scheme extends FromSpec {
public FromSpec_scheme(String name, int component, String uri, String defn, String defnHtml) {
super(name,component,uri,defn,defnHtml);
}
public FromSpec_scheme(String name, int component, String uri) {
this(name,component,uri,null,null);
}
@Override
public boolean isIRISpec() {
return false;
}
}
static public class FromSpec_iri extends FromSpec {
public FromSpec_iri(String name, int component, String uri, String defn, String defnHtml) {
super(name,component,uri,defn,defnHtml);
}
}
static public class FromAlso extends InSpec {
public FromAlso(String spec, String uri) {
super(spec,uri);
}
@Override public boolean isSeeAlso() {
return true;
}
@Override public boolean applies(int slot, String scheme) {
return false;
}
}
final private int force;
final private String name;
final private int code;
final private String description;
final private String descriptionHtml;
final private boolean unimplemented;
final private InSpec specifications[];
public ViolationCodeInfo(int code, String name,
String desc, String descHtml,
int force,
InSpec specs[],
String[] badExamples,
String[] goodExamples,
boolean unimplemented) {
super(badExamples,goodExamples);
if (force==0) force = Force.must;
this.force = force;
this.name = name;
this.code = code;
this.description = desc;
this.descriptionHtml = descHtml;
this.unimplemented = unimplemented;
// this.badExamples = badExamples;
// this.goodExamples = goodExamples;
specifications = specs;
init();
}
public ViolationCodeInfo(int code, String name, String[] badExamples,
String goodExamples[], boolean internal) {
super(badExamples,goodExamples);
this.force = 0;
this.name = name;
this.code = code;
this.description = name;
this.descriptionHtml = "name
";
this.unimplemented = !internal;
// this.badExamples = badExamples;
// this.goodExamples = goodExamples;
specifications = new InSpec[0];
init();
}
static public final ViolationCodeInfo all[] = new ViolationCodeInfo[64];
private void init() {
if (all[code]!=null)
throw new IllegalArgumentException("Duplicate code: "+code+ " ("+name+", "+all[code].name+")");
all[code] = this;
for ( InSpec specification : specifications )
{
specification.add( this );
}
}
public int getCode() {
return code;
}
public int getForce() {
return force;
}
public String getCodeName() {
return name;
}
public boolean appliesTo(Specification specification) {
for ( InSpec specification1 : this.specifications )
{
if ( specification1.spec == specification )
{
return true;
}
}
return false;
}
public boolean isImplemented() {
return !unimplemented;
}
public String description(int slot, AbsIRIImpl iri) {
switch (code) {
case BAD_IDN:
case BAD_IDN_UNASSIGNED_CHARS:
return description + " " + iri.getIDNAException().getMessage();
}
return description;
}
public String specs(int slot, IRIFactoryImpl factory, String scheme) {
String result = "";
boolean iriSpecApplies = false;
for ( InSpec inSpec : specifications )
{
if ( inSpec.isIRISpec() && inSpec.applies( factory ) )
{
iriSpecApplies = true;
}
}
for ( InSpec inSpec : specifications )
{
if ( inSpec.isSeeAlso() )
{
continue;
}
if ( inSpec.isIRISpec() && !iriSpecApplies )
{
continue;
}
if ( !inSpec.applies( slot, scheme ) )
{
continue;
}
Specification spec = inSpec.spec;
String uri = inSpec.uri;
if ( uri == null )
{
uri = spec.getUri();
}
result = result + spec.name() + " <" + uri + "> " + inSpec.definition();
}
return result;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy