Package org.apache.uima.resource.impl

Source Code of org.apache.uima.resource.impl.FileLanguageResource_impl

/*
* 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.resource.impl;

import java.util.HashMap;
import java.util.Map;

import org.apache.uima.UIMAFramework;
import org.apache.uima.resource.DataResource;
import org.apache.uima.resource.FileLanguageResourceSpecifier;
import org.apache.uima.resource.FileResourceSpecifier;
import org.apache.uima.resource.ParameterizedDataResource;
import org.apache.uima.resource.ResourceInitializationException;
import org.apache.uima.resource.ResourceSpecifier;
import org.apache.uima.resource.Resource_ImplBase;

/**
* An implementation of {@link ParameterizedDataResource} for language-based resources. Initialized
* from a {@link FileLanguageResourceSpecifier}.
*
*
*/
public class FileLanguageResource_impl extends Resource_ImplBase implements
        ParameterizedDataResource {

  /** URL prefix */
  private String mFileUrlPrefix;

  /** URL suffix */
  private String mFileUrlSuffix;

  /** Initialization parameters to be passed to DataResources. */
  private Map<String, Object> mResourceInitParams;

  /**
   * @see org.apache.uima.resource.Resource#initialize(org.apache.uima.resource.ResourceSpecifier,
   *      java.util.Map)
   */
  public boolean initialize(ResourceSpecifier aSpecifier, Map<String, Object> aAdditionalParams)
          throws ResourceInitializationException {
    // aSpecifier must be a FileLanguageResourceSpecifier
    if (!(aSpecifier instanceof FileLanguageResourceSpecifier))
      return false;

    // If we get here, aSpecifier is supported by this implementation.
    FileLanguageResourceSpecifier spec = (FileLanguageResourceSpecifier) aSpecifier;

    // Store the attributes for later use.
    mFileUrlPrefix = spec.getFileUrlPrefix();
    mFileUrlSuffix = spec.getFileUrlSuffix();

    // store initialization parameters to be passed on to DataReources
    mResourceInitParams = (aAdditionalParams == null) ? new HashMap<String, Object>() : new HashMap<String, Object>(
            aAdditionalParams);

    return true;
  }

  /**
   * @see org.apache.uima.resource.Resource#destroy()
   */
  public void destroy() {
  }

  /**
   * @see org.apache.uima.resource.ParameterizedDataResource#getDataResource(java.lang.String[])
   */
  public DataResource getDataResource(String[] aParams) throws ResourceInitializationException {
    // one parameter - the language - is required
    if (aParams.length != 1) {
      throw new ResourceInitializationException(
              ResourceInitializationException.INCORRECT_NUMBER_OF_PARAMETERS, new Object[] { "1" });
    }

    String lang = aParams[0];
    DataResource resource = null;
    Exception firstException = null;

    while (resource == null && lang != null) {
      // build URL
      String urlString = mFileUrlPrefix + lang + mFileUrlSuffix;
      // build FileResource specifier and attempt to create DataResource
      FileResourceSpecifier fileSpec = UIMAFramework.getResourceSpecifierFactory()
              .createFileResourceSpecifier();
      fileSpec.setFileUrl(urlString);

      try {
        resource = (DataResource) UIMAFramework.produceResource(DataResource.class, fileSpec,
                mResourceInitParams);
      } catch (ResourceInitializationException e) {
        // this is expected if the data file cannot be found - record first
        // such exception only
        if (firstException == null) {
          firstException = e;
        }
      }

      if (resource == null) {
        // language fallback
        // truncate group name at the last _ or - character
        int lastUnderscore = lang.lastIndexOf('_');
        int lastHyphen = lang.lastIndexOf('-');
        int truncateAt = (lastUnderscore > lastHyphen) ? lastUnderscore : lastHyphen;
        if (truncateAt == -1) {
          lang = null;
        } else {
          lang = lang.substring(0, truncateAt);
        }
      }
    } // end while

    if (resource != null) {
      return resource;
    } else {
      throw new ResourceInitializationException(
              ResourceInitializationException.NO_RESOURCE_FOR_PARAMETERS, new Object[] { "["
                      + aParams[0] + "]" }, firstException);
    }
  }
}
TOP

Related Classes of org.apache.uima.resource.impl.FileLanguageResource_impl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.