blob: 15e05b9af139ac4b093433472006622e17f0b4ef [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.uima.fit.factory;
import org.apache.uima.fit.internal.ReflectionUtil;
import org.apache.uima.resource.metadata.ResourceMetaData;
/**
* Convenience methods to create resource metadata.
*/
public final class ResourceMetaDataFactory {
private ResourceMetaDataFactory() {
// This class is not meant to be instantiated
}
/**
* Adds meta data from a {@link org.apache.uima.fit.descriptor.ResourceMetaData} annotation to the
* given meta data object if such an annotation is present on the component class. If no
* annotation is present, default values are be added.
*
* @param aMetaData
* the meta data object to configure.
* @param aComponentClass
* the class that may carry the {@link org.apache.uima.fit.descriptor.ResourceMetaData}
* annotation
*/
public static void configureResourceMetaData(ResourceMetaData aMetaData, Class<?> aComponentClass) {
org.apache.uima.fit.descriptor.ResourceMetaData componentAnno = ReflectionUtil
.getInheritableAnnotation(org.apache.uima.fit.descriptor.ResourceMetaData.class,
aComponentClass);
if (componentAnno == null) {
// Default handling if no annotation is present.
aMetaData.setCopyright(getDefaultCopyright(aComponentClass));
aMetaData.setDescription(getDefaultDescription(aComponentClass));
aMetaData.setName(getDefaultName(aComponentClass));
aMetaData.setVendor(getDefaultVendor(aComponentClass));
aMetaData.setVersion(getDefaultVersion(aComponentClass));
} else {
// If annotation is present, use it
// Annotation values cannot be null, but we want to avoid empty strings in the meta data,
// thus we set to null when the value is empty.
aMetaData.setCopyright(emptyAsNull(componentAnno.copyright()));
aMetaData.setDescription(emptyAsNull(componentAnno.description()));
aMetaData.setName(emptyAsNull(componentAnno.name()));
aMetaData.setVendor(emptyAsNull(componentAnno.vendor()));
aMetaData.setVersion(emptyAsNull(componentAnno.version()));
}
}
/**
* Used when the version of a component is unknown.
*/
private static final String DEFAULT_VERSION = "unknown";
/**
* Used when the description of a component is unknown.
*/
private static final String DEFAULT_DESCRIPTION = "Descriptor automatically generated by uimaFIT";
/**
* Get the default copyright of a component class.
*
* @param aComponentClass
* the class to analyze
* @return the default copyright
*/
public static String getDefaultCopyright(Class<?> aComponentClass)
{
// rec 2013-01-27: Basically just here for completeness - no idea where to one could obtain
// a copyright information for the class. Possibly from some LICENSE file in the JAR which
// contains the class.
return null;
}
/**
* Get the default version of a component class.
*
* @param aComponentClass
* the class to analyze
* @return the default version
*/
public static String getDefaultVersion(Class<?> aComponentClass)
{
// TODO This method could try to obtain a version from the package of the component
// aComponentClass.getPackage().getImplementationVersion()
return DEFAULT_VERSION;
}
/**
* Get the default description of a component class.
*
* @param aComponentClass
* the class to analyze
* @return the default description
*/
public static String getDefaultDescription(Class<?> aComponentClass)
{
return DEFAULT_DESCRIPTION;
}
/**
* Get the default vendor of a component class.
*
* @param aComponentClass
* the class to analyze
* @return the package name of the component, if the component is in a package, otherwise
* {@code null}.
*/
public static String getDefaultVendor(Class<?> aComponentClass)
{
// TODO This method could try to obtain a vendor from the package of the component
// aComponentClass.getPackage().getImplementationVendor()
if (aComponentClass.getPackage() != null) {
return aComponentClass.getPackage().getName();
}
else {
return null;
}
}
/**
* Get the default name of a component class.
*
* @param aComponentClass
* the class to analyze
* @return the fully qualified name of the class.
*/
public static String getDefaultName(Class<?> aComponentClass)
{
return aComponentClass.getName();
}
private static String emptyAsNull(String aString) {
if (aString == null || aString.length() == 0) {
return null;
}
else {
return aString;
}
}
}