All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.jena.tools.schemagen.SchemagenOptions 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.tools.schemagen;

// Imports
///////////////

import java.lang.reflect.Method;
import java.util.List;

import jena.schemagen;
import jena.schemagen.OptionDefinition;
import org.apache.jena.rdf.model.* ;


/**
 * 

An extension to the option class built in to {@link schemagen}, in which we * allow a two-level defaults hierarchy. Each option is tested against the local * object. If the result is true or non-null, or if the object has * no parent options object, then the result stands. Otherwise, the option value * is delegated to the parent. This allows us to specify global defaults for an * entire group of files to be processed with maven, while still allowing each * file to have its own local options. *

*/ public class SchemagenOptions extends schemagen.SchemagenOptionsImpl { /* ******************************* */ /* Instance variables */ /* ******************************* */ /** The parent options for this options instance */ private SchemagenOptions parent; /* Constructors */ public SchemagenOptions() throws SchemagenOptionsConfigurationException { this(null, null); } public SchemagenOptions(String defaultOutputDir) throws SchemagenOptionsConfigurationException { this(defaultOutputDir, null); } public SchemagenOptions(String defaultOutputDir, Source options) throws SchemagenOptionsConfigurationException { super( new String[]{} ); //set output to default, source options may override if (defaultOutputDir != null) { setOption( OPT.OUTPUT, defaultOutputDir ); } //set schemagen options from Maven plugin config Source if (options != null) { configure(options); } } /* ******************************* */ /* External signature methods */ /* ******************************* */ /** * Set the parent options object for this object * @param parent Parent options object, or null */ protected void setParent( SchemagenOptions parent ) { this.parent = parent; } /** * Return the parent options object, or null * @return The parent options object if defined */ public SchemagenOptions getParent() { return parent; } /** * Return true if this options object has a parent * @return True if parent is defined */ public boolean hasParent() { return getParent() != null; } /** * Get the value of the given option, as a string. If the option is not defined * locally, return the value of the same option of the parent, if the parent * is non-null. Otherwise, return null * @param option The name of the option to retrieve * @return The value of the option as a string, or null if the option is not defined. If * the parent is non-null and the option is not defined, delegate the getOption * to the parent. */ public String getStringOption( OPT option ) { String v = getStringValue( option ); return (v != null) ? v : (parent != null ? parent.getStringOption( option ) : null); } /** * Get the value of the given option, as an RDF node. If the option is not defined * locally, return the value of the same option of the parent, if the parent * is non-null. Otherwise, return null * @param option The name of the option to retrieve * @return The value of the option as an RDFNode, or null if the option is not defined. If * the parent is non-null and the option is not defined, delegate the getOption * to the parent. */ public RDFNode getOption( OPT option ) { RDFNode v = getValue( option ); return (v != null) ? v : (parent != null ? parent.getOption( option ) : null); } /** * Set the value of the given option in the local options list * @param optionName The option to set, as a string value * @param value */ public void setOption( String optionName, String value ) { setOption( asOption( optionName ), value ); } /** * Set the value of the given option in the local options list * @param option The option to set * @param value The string value of the option */ public void setOption( OPT option, String value ) { OptionDefinition od = getOpt( option ); getConfigRoot().addProperty( od.getDeclarationProperty(), value ); } /** * Set the value of the given option in the local options list * @param option The option to set * @param value The Boolean value of the option */ public void setOption( OPT option, boolean value ) { OptionDefinition od = getOpt( option ); getConfigRoot().addProperty( od.getDeclarationProperty(), ResourceFactory.createTypedLiteral( value ) ); } /** * Set the value of the given option in the local options list * @param option The option to set * @param value The Resource value of the option */ public void setOption( OPT option, Resource value ) { OptionDefinition od = getOpt( option ); getConfigRoot().addProperty( od.getDeclarationProperty(), value ); } /* ******************************* */ /* Internal implementation methods */ /* ******************************* */ /** * Configure SchemagenOptions from Source object * @param options Options from Maven configuration * @throws SchemagenOptionsConfigurationException */ protected void configure(Source options) throws SchemagenOptionsConfigurationException { for(Method method : options.getClass().getMethods()) { SchemagenOption schemagenOptionAnnotation = method.getAnnotation(SchemagenOption.class); if (schemagenOptionAnnotation != null) { Object optionValue = null; try { optionValue = method.invoke(options); } catch (Exception e) { throw new SchemagenOptionsConfigurationException(e); } OPT option = schemagenOptionAnnotation.opt(); if (optionValue != null) { if (optionValue instanceof String) { setOption(option, (String) optionValue); } else if (optionValue instanceof Boolean) { setOption(option, (Boolean) optionValue); } else if (optionValue instanceof Resource) { setOption(option, (Resource) optionValue); } else { throw new IllegalArgumentException("Schemagen options of type " + optionValue.getClass().getCanonicalName() + " are not allowed"); } } } } } protected OPT asOption( String optString ) { return OPT.valueOf( optString ); } /** * Return true if the given option is set to true, either locally or * in the parent options object. */ @Override protected boolean isTrue( OPT option ) { return super.isTrue( option ) || (hasParent() && getParent().isTrue( option )); } /** * Return true if the given option has a value, either locally or * in the parent options object. */ @Override protected boolean hasValue( OPT option ) { return super.hasValue( option ) || (hasParent() && getParent().hasValue( option )); } /** * Return the value of the option or null, , either locally or * from the parent options object. */ @Override protected RDFNode getValue( OPT option ) { RDFNode v = super.getValue( option ); return (v == null && hasParent()) ? getParent().getValue( option ) : v; } /** * Return the value of the option or null, , either locally or * from the parent options object. */ @Override protected String getStringValue( OPT option ) { String v = super.getStringValue( option ); return (v == null && hasParent()) ? getParent().getStringValue( option ) : v; } /** * Return true if the given option has a resource value, either locally or * in the parent options object. */ @Override protected boolean hasResourceValue( OPT option ) { return super.hasResourceValue( option ) || (hasParent() && getParent().hasResourceValue( option )); } /** * Return the value of the option or null, , either locally or * from the parent options object. */ @Override protected Resource getResource( OPT option ) { Resource r = super.getResource( option ); return (r == null && hasParent()) ? getParent().getResource( option ) : r; } /** * Return all values for the given options as Strings, either locally or * from the parent options object. */ @Override protected List getAllValues( OPT option ) { List l = super.getAllValues( option ); return (l.isEmpty() && hasParent()) ? getParent().getAllValues( option ) : l; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy