Example usage for org.apache.commons.lang StringUtils substringAfterLast

List of usage examples for org.apache.commons.lang StringUtils substringAfterLast

Introduction

In this page you can find the example usage for org.apache.commons.lang StringUtils substringAfterLast.

Prototype

public static String substringAfterLast(String str, String separator) 

Source Link

Document

Gets the substring after the last occurrence of a separator.

Usage

From source file:org.apache.kylin.storage.jdbc.ITJDBCResourceStoreTest.java

@Test
public void testPerformanceWithResourceTool() throws Exception {
    Assume.assumeTrue(jdbcConnectable);//  ww w .j a  v  a  2s. c  om
    KylinConfig tmpConfig = KylinConfig.createKylinConfig(KylinConfig.getInstanceFromEnv());
    tmpConfig.setMetadataUrl(copyIdentifier + jdbcMetadataUrlNoIdentifier);

    JDBCResourceStore store = (JDBCResourceStore) ResourceStore.getStore(kylinConfig);
    NavigableSet<String> executes = store.listResources(ResourceStore.EXECUTE_RESOURCE_ROOT);
    NavigableSet<String> executeOutputs = store.listResources(ResourceStore.EXECUTE_OUTPUT_RESOURCE_ROOT);

    long startTs = System.currentTimeMillis();

    for (String execute : executes) {
        String uuid = StringUtils.substringAfterLast(execute, "/");
        RawResource executeResource = store.getResource(execute);
        Map<String, RawResource> executeOutputResourceMap = new HashMap<>();

        for (String executeOutput : executeOutputs) {
            if (executeOutput.contains(uuid)) {
                RawResource executeOutputResource = store.getResource(executeOutput);
                executeOutputResourceMap.put(executeOutput, executeOutputResource);
            }
        }

        for (int i = 0; i < 200; i++) {
            String newUuid = UUID.randomUUID().toString();
            store.putResource(ResourceStore.EXECUTE_RESOURCE_ROOT + "/" + newUuid, executeResource.inputStream,
                    System.currentTimeMillis());

            for (String key : executeOutputResourceMap.keySet()) {
                String step = StringUtils.substringAfterLast(key, uuid);
                store.putResource(ResourceStore.EXECUTE_OUTPUT_RESOURCE_ROOT + "/" + newUuid + step,
                        executeOutputResourceMap.get(key).inputStream, System.currentTimeMillis());
            }
        }
    }

    long queryNumBeforeCopy = store.getQueriedSqlNum();
    ResourceTool.copy(kylinConfig, tmpConfig);
    long endTs = System.currentTimeMillis();
    long queryNumAfterCopy = store.getQueriedSqlNum();
    JDBCResourceStore resourceStoreCopy = (JDBCResourceStore) ResourceStore.getStore(tmpConfig);

    int executeNum = store.listResources("/execute").size();
    int executeOutputNum = store.listResources("/execute_output").size();

    assertEquals(executeNum, resourceStoreCopy.listResources("/execute").size());
    assertEquals(executeOutputNum, resourceStoreCopy.listResources("/execute_output").size());

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ROOT);
    String startTime = sdf.format(new Date(Long.parseLong(String.valueOf(startTs))));
    String endTime = sdf.format(new Date(Long.parseLong(String.valueOf(endTs))));

    logger.info("Test performance with ResourceTool done during " + startTime + " to " + endTime);
    logger.info("Now there is " + executeNum + " execute data and " + executeOutputNum
            + " execute_output data in resource store.");
    logger.info("Resource store run " + queryNumBeforeCopy + " sqls for metadata generation, and "
            + (queryNumAfterCopy - queryNumBeforeCopy) + " sqls for copy with ResourceTool.");
    assertTrue((queryNumAfterCopy - queryNumBeforeCopy) < queryNumBeforeCopy);
    logger.info("This test is expected to be done in 10 mins.");
    assertTrue((endTs - startTs) < 600000);
}

From source file:org.apache.nifi.processors.hadoop.KeyValueReader.java

@Override
public Set<FlowFile> readSequenceFile(Path file, Configuration configuration, FileSystem fileSystem)
        throws IOException {

    final SequenceFile.Reader reader;

    Set<FlowFile> flowFiles = new HashSet<>();
    reader = new SequenceFile.Reader(configuration, Reader.file(fileSystem.makeQualified(file)));
    final Text key = new Text();
    final KeyValueWriterCallback callback = new KeyValueWriterCallback(reader);
    final String inputfileName = file.getName() + "." + System.nanoTime() + ".";
    int counter = 0;
    LOG.debug("Read from SequenceFile: {} ", new Object[] { file });
    try {/*from   w  ww  . j  a va2  s . c  o m*/
        while (reader.next(key)) {
            String fileName = key.toString();
            // the key may be a file name, and may not
            if (LOOKS_LIKE_FILENAME.matcher(fileName).matches()) {
                if (fileName.contains(File.separator)) {
                    fileName = StringUtils.substringAfterLast(fileName, File.separator);
                }
                fileName = fileName + "." + System.nanoTime();
            } else {
                fileName = inputfileName + ++counter;
            }

            FlowFile flowFile = session.create();
            flowFile = session.putAttribute(flowFile, CoreAttributes.FILENAME.key(), fileName);
            callback.key = key;
            try {
                flowFile = session.write(flowFile, callback);
                flowFiles.add(flowFile);
            } catch (ProcessException e) {
                LOG.error("Could not write to flowfile {}", new Object[] { flowFile }, e);
                session.remove(flowFile);
            }
            key.clear();
        }
    } finally {
        IOUtils.closeQuietly(reader);
    }

    return flowFiles;
}

From source file:org.apache.nifi.processors.hadoop.ValueReader.java

@Override
public Set<FlowFile> readSequenceFile(final Path file, Configuration configuration, FileSystem fileSystem)
        throws IOException {

    Set<FlowFile> flowFiles = new HashSet<>();
    final SequenceFile.Reader reader = new SequenceFile.Reader(configuration,
            Reader.file(fileSystem.makeQualified(file)));
    final String inputfileName = file.getName() + "." + System.nanoTime() + ".";
    int counter = 0;
    LOG.debug("Reading from sequence file {}", new Object[] { file });
    final OutputStreamWritableCallback writer = new OutputStreamWritableCallback(reader);
    Text key = new Text();
    try {/*from  w  w  w.ja va2 s. c  om*/
        while (reader.next(key)) {
            String fileName = key.toString();
            // the key may be a file name, and may not
            if (LOOKS_LIKE_FILENAME.matcher(fileName).matches()) {
                if (fileName.contains(File.separator)) {
                    fileName = StringUtils.substringAfterLast(fileName, File.separator);
                }
                fileName = fileName + "." + System.nanoTime();
            } else {
                fileName = inputfileName + ++counter;
            }
            FlowFile flowFile = session.create();
            flowFile = session.putAttribute(flowFile, CoreAttributes.FILENAME.key(), fileName);
            try {
                flowFile = session.write(flowFile, writer);
                flowFiles.add(flowFile);
            } catch (ProcessException e) {
                LOG.error("Could not write to flowfile {}", new Object[] { flowFile }, e);
                session.remove(flowFile);
            }
            key.clear();
        }
    } finally {
        IOUtils.closeQuietly(reader);
    }

    return flowFiles;
}

From source file:org.apache.sling.hc.core.impl.servlet.HealthCheckExecutorServlet.java

@Override
protected void doGet(final HttpServletRequest request, final HttpServletResponse response)
        throws ServletException, IOException {

    String tagsStr = StringUtils.defaultIfEmpty(StringUtils.substringBeforeLast(request.getPathInfo(), "."), "")
            .replace("/", "");
    if (StringUtils.isBlank(tagsStr)) {
        // if not provided via path use parameter or default
        tagsStr = StringUtils.defaultIfEmpty(request.getParameter(PARAM_TAGS.name), "");
    }/*  w  ww .  jav  a  2s  .  c om*/
    final String[] tags = tagsStr.split("[, ;]+");

    String format = StringUtils.substringAfterLast(request.getPathInfo(), ".");
    if (StringUtils.isBlank(format)) {
        // if not provided via extension use parameter or default
        format = StringUtils.defaultIfEmpty(request.getParameter(PARAM_FORMAT.name), FORMAT_HTML);
    }

    final Boolean includeDebug = Boolean.valueOf(request.getParameter(PARAM_INCLUDE_DEBUG.name));
    final Map<Result.Status, Integer> statusMapping = request.getParameter(PARAM_HTTP_STATUS.name) != null
            ? getStatusMapping(request.getParameter(PARAM_HTTP_STATUS.name))
            : null;

    HealthCheckExecutionOptions options = new HealthCheckExecutionOptions();
    options.setCombineTagsWithOr(Boolean
            .valueOf(StringUtils.defaultString(request.getParameter(PARAM_COMBINE_TAGS_WITH_OR.name), "true")));
    options.setForceInstantExecution(Boolean.valueOf(request.getParameter(PARAM_FORCE_INSTANT_EXECUTION.name)));
    String overrideGlobalTimeoutVal = request.getParameter(PARAM_OVERRIDE_GLOBAL_TIMEOUT.name);
    if (StringUtils.isNumeric(overrideGlobalTimeoutVal)) {
        options.setOverrideGlobalTimeout(Integer.valueOf(overrideGlobalTimeoutVal));
    }

    List<HealthCheckExecutionResult> executionResults = this.healthCheckExecutor.execute(options, tags);

    Result.Status mostSevereStatus = Result.Status.DEBUG;
    for (HealthCheckExecutionResult executionResult : executionResults) {
        Status status = executionResult.getHealthCheckResult().getStatus();
        if (status.ordinal() > mostSevereStatus.ordinal()) {
            mostSevereStatus = status;
        }
    }
    Result overallResult = new Result(mostSevereStatus, "Overall status " + mostSevereStatus);

    sendNoCacheHeaders(response);

    if (statusMapping != null) {
        Integer httpStatus = statusMapping.get(overallResult.getStatus());
        response.setStatus(httpStatus);
    }

    if (FORMAT_HTML.equals(format)) {
        sendHtmlResponse(overallResult, executionResults, request, response, includeDebug);
    } else if (FORMAT_JSON.equals(format)) {
        sendJsonResponse(overallResult, executionResults, null, response, includeDebug);
    } else if (FORMAT_JSONP.equals(format)) {
        String jsonpCallback = StringUtils.defaultIfEmpty(request.getParameter(PARAM_JSONP_CALLBACK.name),
                JSONP_CALLBACK_DEFAULT);
        sendJsonResponse(overallResult, executionResults, jsonpCallback, response, includeDebug);
    } else if (FORMAT_TXT.equals(format)) {
        sendTxtResponse(overallResult, response);
    } else {
        response.setContentType("text/plain");
        response.getWriter().println("Invalid format " + format + " - supported formats: html|json|jsonp|txt");
    }

}

From source file:org.apache.sling.scripting.sightly.impl.engine.extension.use.ScriptUseProvider.java

private String scriptExtension(String path) {
    String extension = StringUtils.substringAfterLast(path, ".");
    if (StringUtils.isEmpty(extension)) {
        extension = null;/*from  www  .ja v  a  2  s.c om*/
    }
    return extension;
}

From source file:org.apache.sling.scripting.sightly.js.impl.Utils.java

public static boolean isJsScript(String identifier) {
    String extension = StringUtils.substringAfterLast(identifier, ".");
    return JS_EXTENSION.equalsIgnoreCase(extension);
}

From source file:org.apache.sling.slingoakrestrictions.impl.ResourceTypePatternTest.java

@Before
public void setup() {
    initMocks(this);

    setupTreeMock(testTreeParentOutsideScope, StringUtils.substringBeforeLast(TEST_PATH, "/"), null,
            RESOURCE_TYPE_OUTSIDE_SCOPE);
    setupTreeMock(testTree, StringUtils.substringAfterLast(TEST_PATH, "/"), testTreeParentOutsideScope,
            RESOURCE_TYPE_TEST_PATH);/*from w w w. j a  v  a2s .  c  o  m*/

    setupTreeMock(testTreeSub1, TEST_NODE_SUB1, testTree, RESOURCE_TYPE_SUB1);
    setupTreeMock(testTreeSub2, TEST_NODE_SUB2, testTree, RESOURCE_TYPE_SUB2);
    setupTreeMock(testTreeSub3, TEST_NODE_SUB3, testTree, RESOURCE_TYPE_SUB3);

    setupTreeMock(testTreeSub3Sub1, TEST_NODE_SUBSUB1, testTreeSub3, RESOURCE_TYPE_SUBSUB1);
    setupTreeMock(testTreeSub3Sub2, TEST_NODE_SUBSUB2, testTreeSub3, RESOURCE_TYPE_SUBSUB1);

}

From source file:org.apache.sling.slingoakrestrictions.impl.ResourceTypePatternTest.java

private void setupTreeMock(Tree tree, String path, Tree parentTree, String resourceType) {

    doReturn(parentTree == null).when(tree).isRoot();
    doReturn(parentTree).when(tree).getParent();

    mockGetStringProperty(tree, ResourceTypePattern.SLING_RESOURCE_TYPE, resourceType);

    String effectivePath = path;//from  w  ww .ja  v  a  2s. com
    if (parentTree != null) {
        effectivePath = parentTree.getPath() + "/" + path;
        String childNodeName = StringUtils.substringAfterLast(effectivePath, "/");
        doReturn(tree).when(parentTree).getChild(childNodeName);
    }
    doReturn(effectivePath).when(tree).getPath();

    // default for getChild
    doThrow(new IllegalArgumentException()).when(tree).getChild(Mockito.anyString());

}

From source file:org.apache.torque.generator.configuration.ReadConfigurationTest.java

@Test
public void testReadConfiguration() throws Exception {
    ProjectPaths projectPaths = new Maven2DirectoryProjectPaths(new File("src/test/configuration"));
    UnitDescriptor unitDescriptor = new UnitDescriptor(UnitDescriptor.Packaging.DIRECTORY, projectPaths,
            new DefaultTorqueGeneratorPaths());
    UnitConfigurationReader configurationReader = new UnitConfigurationReader();
    ConfigurationHandlers configurationHandlers = new ConfigurationHandlers();
    UnitConfiguration unitConfiguration = configurationReader.read(unitDescriptor, configurationHandlers);
    {/*from   w  w  w.  ja  va2 s .  c om*/
        File defaultTargetDirectory = unitConfiguration.getOutputDirectory(null);
        File expected = new File("src/test/configuration/target/generated-sources");
        assertEquals(expected, defaultTargetDirectory);
    }
    {
        File modifiableTargetDirectory = unitConfiguration.getOutputDirectory("modifiable");
        File expected = new File("src/test/configuration/src/main/generated-java");
        assertEquals(expected, modifiableTargetDirectory);
    }
    try {
        unitConfiguration.getOutputDirectory("notExistingKey");
        fail("Exception expected");
    } catch (IllegalStateException e) {
        // expected
    }

    assertEquals(Loglevel.DEBUG, unitConfiguration.getLoglevel());

    {
        Options expectedOptions = new Options();
        Set<Option> expectedOptionSet = new HashSet<Option>();
        expectedOptionSet
                .add(new OptionImpl(new QualifiedName("org.apache.torque.generator.optionWithNamespace"),
                        "optionWithNamespaceValue"));
        expectedOptionSet.add(new OptionImpl(new QualifiedName("org.apache.optionWithNamespace"),
                "org.apache.optionWithNamespaceValue"));
        expectedOptionSet.add(
                new OptionImpl(new QualifiedName("optionWithoutNamespace", ""), "optionWithoutNamespaceValue"));
        expectedOptionSet.add(new OptionImpl(new QualifiedName("optionPrecedenceLastFile"), "value from xml"));
        expectedOptionSet.add(new OptionImpl(new QualifiedName("jdbcUrl"), "jdbc.url.option.value"));
        expectedOptionSet.add(new OptionImpl(new QualifiedName("jdbcDriver"), "jdbc.driver.option.value"));
        expectedOptions.addGlobalOptions(expectedOptionSet);
        assertOptionsEquals(expectedOptions, unitConfiguration.getOptions());
    }

    {
        EntityReferences entityReferences = unitConfiguration.getEntityReferences();
        Map<String, byte[]> actual = entityReferences.getEntityReferences();
        assertEquals(2, actual.size());
        assertArrayEquals(
                FileUtils.readFileToByteArray(
                        new File("src/test/configuration/src/main/torque-gen/resources/override.xsd")),
                actual.get("http://db.apache.org/torque/some.xsd"));
        assertArrayEquals(
                FileUtils.readFileToByteArray(
                        new File("src/test/configuration/src/main/torque-gen/resources/new.xsd")),
                actual.get("http://db.apache.org/torque/new.xsd"));
    }

    {
        List<Output> outputFiles = unitConfiguration.getOutputList();
        assertEquals(3, outputFiles.size());

        {
            Output output = outputFiles.get(0);
            assertEquals(new QualifiedName("org.apache.torque.generator.firstOutput"), output.getName());
            assertEquals("skip", output.getExistingTargetStrategy());
            assertEquals(null, output.getOutputDirKey());
            assertNull(output.getFilename());

            {
                OutletReference outletConfiguration = output.getContentOutlet();
                assertEquals(new QualifiedName("org.apache.torque.generator.test.readConfiguration.javaOutlet"),
                        outletConfiguration.getName());
            }

            {
                JavaOutlet filenameOutlet = (JavaOutlet) output.getFilenameOutlet();
                assertEquals("Foo", filenameOutlet.getFoo());
                assertEquals("Bar", filenameOutlet.getBar());
                assertEquals(new QualifiedName("org.apache.torque.generator.configuration.filenameOutlet"),
                        filenameOutlet.getName());
            }

            {
                Fileset sourceFileset = new Fileset(projectPaths.getDefaultSourcePath(), new HashSet<String>(),
                        new HashSet<String>());
                FileSourceProvider sourceProvider = new FileSourceProvider(new XmlSourceFormat(), sourceFileset,
                        null);
                sourceProvider.init(configurationHandlers, controllerState);
                output.getSourceProvider().init(configurationHandlers, controllerState);
                assertFileSourceProviderEquals(sourceProvider, (FileSourceProvider) output.getSourceProvider());
            }
            assertSourceProcessConfigurationEquals(new SourceProcessConfiguration(),
                    output.getSourceProcessConfiguration());
        }

        {
            Output output = outputFiles.get(1);
            assertEquals(new QualifiedName("secondOutput"), output.getName());
            assertEquals("replace", output.getExistingTargetStrategy());
            assertEquals("secondOutputDirKey", output.getOutputDirKey());
            assertNull(output.getFilename());

            {
                OutletReference outletConfiguration = output.getContentOutlet();
                assertEquals(
                        new QualifiedName("org.apache.torque.generator.test.readConfiguration.anotherOutlet"),
                        outletConfiguration.getName());
            }

            {
                VelocityOutlet filenameOutlet = (VelocityOutlet) output.getFilenameOutlet();
                String templateContent = filenameOutlet.getContent(controllerState);
                // remove License from template by comparing only
                // the last line
                String templateContentLicenseRemoved = StringUtils.substringAfterLast(templateContent, "\r\n");
                assertEquals("test template output", templateContentLicenseRemoved);
                assertEquals(new QualifiedName("org.apache.torque.generator.configuration.filenameOutlet"),
                        filenameOutlet.getName());
                assertTrue(filenameOutlet.isOptionsInContext());
                assertTrue(filenameOutlet.isSourceAttributesInContext());
                assertTrue(filenameOutlet.isVariablesInContext());
            }

            {
                Fileset sourceFileset = new Fileset(projectPaths.getDefaultSourcePath(),
                        createSetFrom("second.source.path.properties"),
                        createSetFrom("second.excluded.properties"));
                FileSourceProvider sourceProvider = new FileSourceProvider(new PropertiesSourceFormat(),
                        sourceFileset, true);
                sourceProvider.init(configurationHandlers, controllerState);
                output.getSourceProvider().init(configurationHandlers, controllerState);
                assertFileSourceProviderEquals(sourceProvider, (FileSourceProvider) output.getSourceProvider());
            }
            {
                SourceProcessConfiguration sourceProcessConfiguration = new SourceProcessConfiguration();
                sourceProcessConfiguration.setStartElementsPath("properties/entry");
                List<SourceTransformerDefinition> transformerDefinitions = new ArrayList<SourceTransformerDefinition>();

                transformerDefinitions
                        .add(new SourceTransformerDefinition(new ConfigurationTestTransformer(), null));
                transformerDefinitions.add(
                        new SourceTransformerDefinition(new OtherConfigurationTestTransformer(), "database"));
                sourceProcessConfiguration.setSourceTransformerDefinitions(transformerDefinitions);
                sourceProcessConfiguration.setSkipDecider(
                        "org.apache.torque.generator.configuration.ConfigurationTestSkipDecider");
                assertSourceProcessConfigurationEquals(sourceProcessConfiguration,
                        output.getSourceProcessConfiguration());
            }
        }
        {
            Output output = outputFiles.get(2);
            assertEquals(new QualifiedName("thirdOutput"), output.getName());
            assertEquals("append", output.getExistingTargetStrategy());
            assertEquals("thirdOutputDirKey", output.getOutputDirKey());
            assertEquals("outputFileName", output.getFilename());
            assertNull(output.getFilenameOutlet());

            {
                OutletReference outletConfiguration = output.getContentOutlet();
                assertEquals(
                        new QualifiedName("org.apache.torque.generator.test.readConfiguration.thirdOutlet"),
                        outletConfiguration.getName());
            }

            {
                JdbcMetadataSourceProvider sourceProvider = new JdbcMetadataSourceProvider("jdbcUrl",
                        "jdbcDriver", "jdbcUsername", "jdbcPassword", "jdbcSchema");
                sourceProvider.init(configurationHandlers, controllerState);
                output.getSourceProvider().init(configurationHandlers, controllerState);
                assertJdbcMetadataSourceProviderEquals(sourceProvider,
                        (JdbcMetadataSourceProvider) output.getSourceProvider());
            }
            assertSourceProcessConfigurationEquals(new SourceProcessConfiguration(),
                    output.getSourceProcessConfiguration());
        }
    }

    {
        OutletConfiguration outletConfiguration = unitConfiguration.getOutletConfiguration();
        Map<QualifiedName, Outlet> outletMap = outletConfiguration.getOutlets();
        assertEquals(2, outletMap.size());
        {
            JavaOutlet outlet = (JavaOutlet) outletMap
                    .get(new QualifiedName("org.apache.torque.generator.test.readConfiguration.javaOutlet"));
            assertEquals("Foo2", outlet.getFoo());
            assertEquals("Bar2", outlet.getBar());
            Map<String, MergepointMapping> mergepointMappings = outlet.getMergepointMappings();
            assertEquals(3, mergepointMappings.size());
            {
                MergepointMapping mergepointMapping = mergepointMappings.get("properties");
                assertEquals(1, mergepointMapping.getActions().size());
                MergepointAction action = mergepointMapping.getActions().get(0);
                assertEquals(new TraverseAllAction("entry", "org.apache.torque.generator.velocity.propertyCopy",
                        true), action);
                assertEquals("inputElement", outlet.getInputElementName());
            }
            {
                // mergepoint from the separate mapping
                MergepointMapping mergepointMapping = mergepointMappings.get("mergepointName");
                assertEquals(1, mergepointMapping.getActions().size());
                MergepointAction action = mergepointMapping.getActions().get(0);
                assertEquals(new ApplyAction(null, "someOutletAction", false), action);
                assertEquals("inputElement", outlet.getInputElementName());
            }
            {
                // other mergepoint from the separate mapping
                MergepointMapping mergepointMapping = mergepointMappings.get("mergepointFromParent");
                assertEquals(1, mergepointMapping.getActions().size());
                MergepointAction action = mergepointMapping.getActions().get(0);
                assertEquals(new ApplyAction(null, "newOutletAction", true), action);
                assertEquals("inputElement", outlet.getInputElementName());
            }
        }

        {
            VelocityOutlet outlet = (VelocityOutlet) outletMap
                    .get(new QualifiedName("org.apache.torque.generator.test.readConfiguration.anotherOutlet"));
            String templateContent = outlet.getContent(controllerState);
            // remove License from template by comparing only
            // the last line
            String templateContentLicenseRemoved = StringUtils.substringAfterLast(templateContent, "\r\n");
            assertEquals("test template output", templateContentLicenseRemoved);
            assertEquals(0, outlet.getMergepointMappings().size());
            assertNull(outlet.getInputElementName());
            assertFalse(outlet.isOptionsInContext());
            assertFalse(outlet.isSourceAttributesInContext());
            assertFalse(outlet.isVariablesInContext());
        }
    }
}

From source file:org.apache.torque.generator.configuration.ReadConfigurationTest.java

@Test
public void testInheritance() throws Exception {
    CustomProjectPaths projectPaths;//from   w  ww .j  a  va 2  s .  c om
    UnitConfiguration unitConfiguration;
    ConfigurationHandlers configurationHandlers = new ConfigurationHandlers();
    {
        CustomProjectPaths parentProjectPaths = new CustomProjectPaths(
                new Maven2DirectoryProjectPaths(new File("src/test/configuration")));
        parentProjectPaths.setConfigurationDir(new File("src/test/configuration/src/main/torque-gen-parent"));
        parentProjectPaths.setOutputDirectory(null, new File("src/test/configuration/target/parentCustom"));
        parentProjectPaths.setOutputDirectory("modifiable",
                new File("src/test/configuration/src/main/parentCustom"));
        UnitDescriptor parentUnitDescriptor = new UnitDescriptor(UnitDescriptor.Packaging.DIRECTORY,
                parentProjectPaths, new DefaultTorqueGeneratorPaths());

        projectPaths = new CustomProjectPaths(
                new Maven2DirectoryProjectPaths(new File("src/test/configuration")));
        projectPaths.setOutputDirectory(null, new File("src/test/configuration/target/custom"));
        projectPaths.setOutputDirectory("modifiable", new File("src/test/configuration/src/main/custom"));
        UnitDescriptor unitDescriptor = new UnitDescriptor(UnitDescriptor.Packaging.DIRECTORY, projectPaths,
                new DefaultTorqueGeneratorPaths());
        unitDescriptor.setInheritsFrom(parentUnitDescriptor);
        UnitConfigurationReader configurationReader = new UnitConfigurationReader();
        unitConfiguration = configurationReader.read(unitDescriptor, configurationHandlers);
    }

    assertEquals(Loglevel.DEBUG, unitConfiguration.getLoglevel());

    {
        File newFileTargetDirectory = unitConfiguration.getOutputDirectory(null);
        File expected = new File("src/test/configuration/target/custom");
        assertEquals(expected, newFileTargetDirectory);
    }
    {
        File modifiableFileTargetDirectory = unitConfiguration.getOutputDirectory("modifiable");
        File expected = new File("src/test/configuration/src/main/custom");
        assertEquals(expected, modifiableFileTargetDirectory);
    }

    {
        Options expectedOptions = new Options();
        Set<Option> expectedOptionSet = new HashSet<Option>();
        expectedOptionSet
                .add(new OptionImpl(new QualifiedName("org.apache.torque.generator.optionWithNamespace"),
                        "optionWithNamespaceValue"));
        expectedOptionSet.add(new OptionImpl(new QualifiedName("org.apache.optionWithNamespace"),
                "org.apache.optionWithNamespaceValue"));
        expectedOptionSet.add(
                new OptionImpl(new QualifiedName("optionWithoutNamespace", ""), "optionWithoutNamespaceValue"));
        expectedOptionSet.add(new OptionImpl(new QualifiedName("optionPrecedenceLastFile"), "value from xml"));
        expectedOptionSet.add(new OptionImpl(new QualifiedName("jdbcUrl"), "jdbc.url.option.value"));
        expectedOptionSet.add(new OptionImpl(new QualifiedName("jdbcDriver"), "jdbc.driver.option.value"));
        expectedOptionSet.add(new OptionImpl(new QualifiedName("parentOptionWithoutNamespace", ""),
                "parentOptionWithoutNamespaceParentValue"));
        expectedOptionSet
                .add(new OptionImpl(new QualifiedName("org.apache.torque.generator.parentOptionWithNamespace"),
                        "parentOptionWithNamespaceParentValue"));
        expectedOptions.addGlobalOptions(expectedOptionSet);
        assertOptionsEquals(expectedOptions, unitConfiguration.getOptions());
    }

    {
        EntityReferences entityReferences = unitConfiguration.getEntityReferences();
        Map<String, byte[]> actual = entityReferences.getEntityReferences();
        assertEquals(3, actual.size());
        assertArrayEquals(
                FileUtils.readFileToByteArray(
                        new File("src/test/configuration/src/main/torque-gen-parent/resources/parent.xsd")),
                actual.get("http://db.apache.org/torque/parent.xsd"));
        assertArrayEquals(
                FileUtils.readFileToByteArray(
                        new File("src/test/configuration/src/main/torque-gen/resources/override.xsd")),
                actual.get("http://db.apache.org/torque/some.xsd"));
        assertArrayEquals(
                FileUtils.readFileToByteArray(
                        new File("src/test/configuration/src/main/torque-gen/resources/new.xsd")),
                actual.get("http://db.apache.org/torque/new.xsd"));
    }

    {
        List<Output> outputList = unitConfiguration.getOutputList();
        assertEquals(4, outputList.size());

        {
            Output output = outputList.get(0);
            assertEquals(new QualifiedName("parentOutput"), output.getName());
            assertEquals("replace", output.getExistingTargetStrategy());
            assertEquals("parentOutputDirKeyFromParent", output.getOutputDirKey());
            assertNull(output.getFilename());
            {
                OutletReference outletConfiguration = output.getContentOutlet();
                assertEquals(
                        new QualifiedName(
                                "org.apache.torque.generator.test.readConfiguration.testParentOutlet"),
                        outletConfiguration.getName());
            }
            {
                JavaOutlet filenameOutlet = (JavaOutlet) output.getFilenameOutlet();
                assertEquals("ParentFoo", filenameOutlet.getFoo());
                assertEquals("ParentBar", filenameOutlet.getBar());
                assertEquals(new QualifiedName("org.apache.torque.generator.configuration.filenameOutlet"),
                        filenameOutlet.getName());
            }

            {
                Fileset sourceFileset = new Fileset(projectPaths.getDefaultSourcePath(),
                        createSetFrom("parentSource"), new HashSet<String>());
                FileSourceProvider sourceProvider = new FileSourceProvider(new XmlSourceFormat(), sourceFileset,
                        false);
                output.getSourceProvider().init(configurationHandlers, controllerState);
                sourceProvider.init(configurationHandlers, controllerState);
                assertFileSourceProviderEquals(sourceProvider, (FileSourceProvider) output.getSourceProvider());
            }
            {
                SourceProcessConfiguration sourceProcessConfiguration = new SourceProcessConfiguration();
                sourceProcessConfiguration.setStartElementsPath("parentSourceElement");
                List<SourceTransformerDefinition> transformerDefinitions = new ArrayList<SourceTransformerDefinition>();

                transformerDefinitions.add(new SourceTransformerDefinition(
                        new OtherConfigurationTestTransformer(), "parent/database"));
                sourceProcessConfiguration.setSourceTransformerDefinitions(transformerDefinitions);
                sourceProcessConfiguration.setSkipDecider(
                        "org.apache.torque.generator.configuration.OtherConfigurationTestSkipDecider");
                assertSourceProcessConfigurationEquals(sourceProcessConfiguration,
                        output.getSourceProcessConfiguration());
            }
        }
        {
            Output output = outputList.get(1);
            assertEquals(new QualifiedName("org.apache.torque.generator.firstOutput"), output.getName());
            assertEquals("skip", output.getExistingTargetStrategy());
            assertEquals(null, output.getOutputDirKey());
            assertNull(output.getFilename());

            {
                OutletReference outletConfiguration = output.getContentOutlet();
                assertEquals(new QualifiedName("org.apache.torque.generator.test.readConfiguration.javaOutlet"),
                        outletConfiguration.getName());
            }
            {
                JavaOutlet filenameOutlet = (JavaOutlet) output.getFilenameOutlet();
                assertEquals("Foo", filenameOutlet.getFoo());
                assertEquals("Bar", filenameOutlet.getBar());
                assertEquals(new QualifiedName("org.apache.torque.generator.configuration.filenameOutlet"),
                        filenameOutlet.getName());
            }

            {
                Fileset sourceFileset = new Fileset(projectPaths.getDefaultSourcePath(), new HashSet<String>(),
                        new HashSet<String>());
                FileSourceProvider sourceProvider = new FileSourceProvider(new XmlSourceFormat(), sourceFileset,
                        null);
                sourceProvider.init(configurationHandlers, controllerState);
                output.getSourceProvider().init(configurationHandlers, controllerState);
                assertFileSourceProviderEquals(sourceProvider, (FileSourceProvider) output.getSourceProvider());
            }
            assertSourceProcessConfigurationEquals(new SourceProcessConfiguration(),
                    output.getSourceProcessConfiguration());
        }

        {
            Output output = outputList.get(2);
            assertEquals(new QualifiedName("secondOutput"), output.getName());
            assertEquals("replace", output.getExistingTargetStrategy());
            assertEquals(output.getOutputDirKey(), "secondOutputDirKey");
            assertNull(output.getFilename());

            {
                OutletReference outletConfiguration = output.getContentOutlet();
                assertEquals(
                        new QualifiedName("org.apache.torque.generator.test.readConfiguration.anotherOutlet"),
                        outletConfiguration.getName());
            }
            {
                VelocityOutlet filenameOutlet = (VelocityOutlet) output.getFilenameOutlet();
                String templateContent = filenameOutlet.getContent(controllerState);
                // remove License from template by comparing only
                // the last line
                String templateContentLicenseRemoved = StringUtils.substringAfterLast(templateContent, "\r\n");
                assertEquals("test template output", templateContentLicenseRemoved);
                assertEquals(new QualifiedName("org.apache.torque.generator.configuration.filenameOutlet"),
                        filenameOutlet.getName());
            }

            {
                Fileset sourceFileset = new Fileset(projectPaths.getDefaultSourcePath(),
                        createSetFrom("second.source.path.properties"),
                        createSetFrom("second.excluded.properties"));
                FileSourceProvider sourceProvider = new FileSourceProvider(new PropertiesSourceFormat(),
                        sourceFileset, true);
                sourceProvider.init(configurationHandlers, controllerState);
                output.getSourceProvider().init(configurationHandlers, controllerState);
                assertFileSourceProviderEquals(sourceProvider, (FileSourceProvider) output.getSourceProvider());
            }
            {
                SourceProcessConfiguration sourceProcessConfiguration = new SourceProcessConfiguration();
                sourceProcessConfiguration.setStartElementsPath("properties/entry");
                List<SourceTransformerDefinition> transformerDefinitions = new ArrayList<SourceTransformerDefinition>();
                transformerDefinitions
                        .add(new SourceTransformerDefinition(new ConfigurationTestTransformer(), null));
                transformerDefinitions.add(
                        new SourceTransformerDefinition(new OtherConfigurationTestTransformer(), "database"));
                sourceProcessConfiguration.setSourceTransformerDefinitions(transformerDefinitions);
                sourceProcessConfiguration.setSkipDecider(
                        "org.apache.torque.generator.configuration.ConfigurationTestSkipDecider");
                assertSourceProcessConfigurationEquals(sourceProcessConfiguration,
                        output.getSourceProcessConfiguration());
            }
        }
        {
            Output output = outputList.get(3);
            assertEquals(new QualifiedName("thirdOutput"), output.getName());
            assertEquals("append", output.getExistingTargetStrategy());
            assertEquals("thirdOutputDirKey", output.getOutputDirKey());
            assertEquals("outputFileName", output.getFilename());
            assertNull(output.getFilenameOutlet());

            {
                OutletReference outletConfiguration = output.getContentOutlet();
                assertEquals(
                        new QualifiedName("org.apache.torque.generator.test.readConfiguration.thirdOutlet"),
                        outletConfiguration.getName());
            }

            {
                JdbcMetadataSourceProvider sourceProvider = new JdbcMetadataSourceProvider("jdbcUrl",
                        "jdbcDriver", "jdbcUsername", "jdbcPassword", "jdbcSchema");
                sourceProvider.init(configurationHandlers, controllerState);
                output.getSourceProvider().init(configurationHandlers, controllerState);
                assertJdbcMetadataSourceProviderEquals(sourceProvider,
                        (JdbcMetadataSourceProvider) output.getSourceProvider());
            }
            assertSourceProcessConfigurationEquals(new SourceProcessConfiguration(),
                    output.getSourceProcessConfiguration());
        }
    }

    {
        OutletConfiguration outletConfiguration = unitConfiguration.getOutletConfiguration();
        Map<QualifiedName, Outlet> outletMap = outletConfiguration.getOutlets();
        assertEquals(3, outletMap.size());
        {
            JavaOutlet outlet = (JavaOutlet) outletMap
                    .get(new QualifiedName("org.apache.torque.generator.test.readConfiguration.javaOutlet"));
            assertEquals("Foo2", outlet.getFoo());
            assertEquals("Bar2", outlet.getBar());
            Map<String, MergepointMapping> mergepointMappings = outlet.getMergepointMappings();
            assertEquals(3, mergepointMappings.size());
            {
                MergepointMapping mergepointMapping = mergepointMappings.get("properties");
                assertEquals(1, mergepointMapping.getActions().size());
                MergepointAction action = mergepointMapping.getActions().get(0);
                assertEquals(new TraverseAllAction("entry", "org.apache.torque.generator.velocity.propertyCopy",
                        true), action);
                assertEquals("inputElement", outlet.getInputElementName());
            }
            {
                // mergepoint from the separate mapping in child
                MergepointMapping mergepointMapping = mergepointMappings.get("mergepointName");
                assertEquals(1, mergepointMapping.getActions().size());
                MergepointAction action = mergepointMapping.getActions().get(0);
                assertEquals(new ApplyAction(null, "someOutletAction", false), action);
                assertEquals("inputElement", outlet.getInputElementName());
            }
            {
                // other mergepoint from the separate mapping in child
                MergepointMapping mergepointMapping = mergepointMappings.get("mergepointFromParent");
                assertEquals(1, mergepointMapping.getActions().size());
                MergepointAction action = mergepointMapping.getActions().get(0);
                assertEquals(new ApplyAction(null, "newOutletAction", true), action);
                assertEquals("inputElement", outlet.getInputElementName());
            }
        }

        {
            VelocityOutlet outlet = (VelocityOutlet) outletMap
                    .get(new QualifiedName("org.apache.torque.generator.test.readConfiguration.anotherOutlet"));
            String templateContent = outlet.getContent(controllerState);
            // remove License from template by comparing only
            // the last line
            String templateContentLicenseRemoved = StringUtils.substringAfterLast(templateContent, "\r\n");
            assertEquals("test template output", templateContentLicenseRemoved);
            assertEquals(0, outlet.getMergepointMappings().size());
        }
        {
            VelocityOutlet outlet = (VelocityOutlet) outletMap
                    .get(new QualifiedName("org.apache.torque.generator.test.readConfiguration.parentOutlet"));
            String templateContent = outlet.getContent(controllerState);
            // remove License from template by comparing only
            // the last line
            String templateContentLicenseRemoved = StringUtils.substringAfterLast(templateContent, "\r\n");
            assertEquals("parent test template output", templateContentLicenseRemoved);
            assertEquals(0, outlet.getMergepointMappings().size());
        }
    }
}