Java Code Examples for org.alfresco.service.cmr.repository.ContentReader#isChannelOpen()

The following examples show how to use org.alfresco.service.cmr.repository.ContentReader#isChannelOpen() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: AbstractContentTransformer.java    From alfresco-repository with GNU Lesser General Public License v3.0 4 votes vote down vote up
/**
 * Performs the following:
 * <ul>
 *   <li>Times the transformation</li>
 *   <li>Ensures that the transformation is allowed</li>
 *   <li>Calls the subclass implementation of {@link #transformInternal(ContentReader, ContentWriter, Map)}</li>
 *   <li>Transforms any exceptions generated</li>
 *   <li>Logs a successful transformation</li>
 * </ul>
 * Subclass need only be concerned with performing the transformation.
 * <p>
 * If the options provided are null, then an empty map will be created.
 */
@SuppressWarnings("deprecation")
public final void transform(
        ContentReader reader,
        ContentWriter writer,
        Map<String, Object> options) throws ContentIOException
{
    // begin timing
    long before = System.currentTimeMillis();
    
    // check options map
    if (options == null)
    {
        options = Collections.emptyMap();
    }
    
    try
    {
        // Check the reliability
        checkReliability(reader, writer);

        // Transform
        transformInternal(reader, writer, options);
    }
    catch (Throwable e)
    {
        // Make sure that this transformation gets set back i.t.o. time taken.
        // This will ensure that transformers that compete for the same transformation
        // will be prejudiced against transformers that tend to fail
        recordTime(10000);   // 10 seconds, i.e. rubbish
        
        throw new ContentIOException("Content conversion failed: \n" +
                "   reader: " + reader + "\n" +
                "   writer: " + writer + "\n" +
                "   options: " + options,
                e);
    }
    finally
    {
        // check that the reader and writer are both closed
        if (reader.isChannelOpen())
        {
            logger.error("Content reader not closed by transformer: \n" +
                    "   reader: " + reader + "\n" +
                    "   transformer: " + this);
        }
        if (writer.isChannelOpen())
        {
            logger.error("Content writer not closed by transformer: \n" +
                    "   writer: " + writer + "\n" +
                    "   transformer: " + this);
        }
    }
    
    // record time
    long after = System.currentTimeMillis();
    recordTime(after - before);
    
    // done
    if (logger.isDebugEnabled())
    {
        logger.debug("Completed transformation: \n" +
                "   reader: " + reader + "\n" +
                "   writer: " + writer + "\n" +
                "   options: " + options + "\n" +
                "   transformer: " + this);
    }
}
 
Example 2
Source File: XmlMetadataExtracter.java    From alfresco-repository with GNU Lesser General Public License v3.0 4 votes vote down vote up
/**
 * Selects and extracter to perform the work and redirects to it.
 */
@Override
public Map<QName, Serializable> extract(ContentReader reader, OverwritePolicy overwritePolicy,
            Map<QName, Serializable> destination, Map<String, Set<QName>> mapping)
{
    // Check the content length
    if (reader.getSize() == 0)
    {
        // There is no content. We don't spoof any properties so there can
        // be nothing extracted.
        if (logger.isDebugEnabled())
        {
            logger.debug("\n" + "XML document has zero length, so bypassing extraction: \n" + "   Document: "
                        + reader);
        }
        return destination;
    }

    MetadataExtracter extracter = null;
    // Select a worker
    for (ContentWorkerSelector<MetadataExtracter> selector : selectors)
    {
        ContentReader spawnedReader = reader.getReader();
        try
        {
            extracter = selector.getWorker(spawnedReader);
        }
        catch (Throwable e)
        {
            // The selector failed, so try another
        }
        finally
        {
            if (reader.isChannelOpen())
            {
                logger.error("Content reader not closed by MetadataExtractor selector: \n" + "   reader:   "
                            + reader + "\n" + "   selector: " + selector);
            }
        }
        // Just take the first successful one
        if (extracter != null)
        {
            if (logger.isDebugEnabled())
            {
                logger.debug("\n" + "Found metadata extracter to process XML document: \n" + "   Selector: "
                            + selector + "\n" + "   Document: " + reader);
            }
            break;
        }
    }
    Map<QName, Serializable> modifiedProperties = null;
    // Did we find anything?
    if (extracter == null)
    {
        if (logger.isDebugEnabled())
        {
            logger.debug("\n" + "No working metadata extractor could be found: \n" + "   Document: " + reader);
        }
        // There will be no properties extracted
        modifiedProperties = destination;
    }
    else
    {
        // An extractor was selected
        try
        {
            modifiedProperties = extracter.extract(reader, overwritePolicy, destination, mapping);
        }
        finally
        {
            if (reader.isChannelOpen())
            {
                logger.error("Content reader not closed by MetadataExtractor: \n" + "   Reader:   " + reader + "\n"
                            + "   extracter: " + extracter);
            }
        }
    }
    // Done
    if (logger.isDebugEnabled())
    {
        logger.debug("\n" + "XML metadata extractor redirected: \n" + "   Reader:    " + reader + "\n"
                    + "   Extracter: " + extracter + "\n" + "   Metadata: " + modifiedProperties);
    }
    return modifiedProperties;
}