Search in sources :

Example 1 with ResourceLoader

use of org.apache.stanbol.entityhub.indexing.core.source.ResourceLoader in project stanbol by apache.

the class VcardIndexingSource method setConfiguration.

@Override
public void setConfiguration(Map<String, Object> config) {
    // init fields
    IndexingConfig indexingConfig = (IndexingConfig) config.get(IndexingConfig.KEY_INDEXING_CONFIG);
    loader = new ResourceLoader(this, true, false);
    // vcard files are imported from a special folder in the destination dir.
    // this folder needs to be deleted/(re-)created first.
    vcardFileImportFolder = new File(indexingConfig.getDestinationFolder(), "vcard");
    if (vcardFileImportFolder.exists()) {
        if (vcardFileImportFolder.isDirectory()) {
            try {
                FileUtils.deleteDirectory(vcardFileImportFolder);
            } catch (IOException e) {
                throw new IllegalStateException("Unable to delete Folder " + vcardFileImportFolder.getAbsolutePath() + " containing the vCard files from a" + "previouse indexing! Please remove this folder manually.", e);
            }
        } else if (!vcardFileImportFolder.delete()) {
            throw new IllegalStateException("Unable to delete File " + vcardFileImportFolder.getAbsolutePath() + " containing the vCard data from a" + "previouse indexing! Please remove this File manually.");
        }
    }
    if (!vcardFileImportFolder.mkdirs()) {
        throw new IllegalStateException("Unable to delete Folder " + vcardFileImportFolder.getAbsolutePath() + " containing the vCard files from a" + "previouse indexing! Please remove this folder manually.");
    }
    // load config
    Object value;
    log.debug("load vcard resources from :");
    value = config.get(PARAM_SOURCE_FILE_OR_FOLDER);
    if (value == null) {
        // if not set use the default
        value = DEFAULT_SOURCE_FOLDER_NAME;
    }
    for (String source : value.toString().split(",")) {
        File sourceFileOrDirectory = indexingConfig.getSourceFile(source);
        if (sourceFileOrDirectory.exists()) {
            // register the configured source with the ResourceLoader
            this.loader.addResource(sourceFileOrDirectory);
        } else {
            if (FilenameUtils.getExtension(source).isEmpty()) {
                // RDF files.
                if (!sourceFileOrDirectory.mkdirs()) {
                    log.warn("Unable to create directory {} configured to improt source data from. " + "You will need to create this directory manually before copying the" + "Source files into it.", sourceFileOrDirectory);
                    // this would not be necessary because the directory will
                    // be empty - however I like to be consistent and have
                    // all configured and existent files & dirs added the the
                    // resource loader
                    this.loader.addResource(sourceFileOrDirectory);
                }
            } else {
                log.warn("Unable to find vcard source {} within the indexing Source folder ", source, indexingConfig.getSourceFolder());
            }
        }
    }
    if (log.isDebugEnabled()) {
        for (String registeredSource : loader.getResources(ResourceState.REGISTERED)) {
            log.debug(" > " + registeredSource);
        }
    }
    // parse the encoding
    value = config.get(PARAM_CHARSET);
    if (value != null) {
        String encoding = value.toString();
        if (encoding.isEmpty()) {
            // use plattform encoding if empty
            charset = Charset.defaultCharset();
        } else {
            try {
                charset = Charset.forName(encoding);
            } catch (RuntimeException e) {
                throw new IllegalStateException("The configured encoding '" + encoding + "' is not supported by this Plattform", e);
            }
        }
    } else {
        // use plattorm encoding if missing
        charset = Charset.defaultCharset();
    }
    // parse the prefix
    value = config.get(PARAM_PREFIX);
    if (value == null || value.toString().isEmpty()) {
        throw new IllegalStateException("Teh configuration is missing the required parameter 'prefix'!");
    } else {
        prefix = value.toString();
        // set the typeSeperatorChar based on the kind of parsed prefix
        if (prefix.endsWith("#")) {
            typeSeperatorChar = '.';
        } else if (prefix.endsWith("/")) {
            typeSeperatorChar = '/';
        } else if (prefix.endsWith(":")) {
            typeSeperatorChar = ':';
        } else if (prefix.startsWith("urn:")) {
            // maybe an urn without an tailing ':'
            prefix = prefix + ':';
            typeSeperatorChar = ':';
        } else if (prefix.indexOf("://") > 0) {
            // maybe an url without an tailing '/' or '#'
            prefix = prefix + '/';
        }
    // else ... no idea what kind of prefix ... use the default '/'
    }
}
Also used : ResourceLoader(org.apache.stanbol.entityhub.indexing.core.source.ResourceLoader) IndexingConfig(org.apache.stanbol.entityhub.indexing.core.config.IndexingConfig) IOException(java.io.IOException) File(java.io.File)

Example 2 with ResourceLoader

use of org.apache.stanbol.entityhub.indexing.core.source.ResourceLoader in project stanbol by apache.

the class RdfIndexingSource method setConfiguration.

@Override
public void setConfiguration(Map<String, Object> config) {
    IndexingConfig indexingConfig = (IndexingConfig) config.get(IndexingConfig.KEY_INDEXING_CONFIG);
    // first init the RDF Model
    this.indexingDataset = Utils.getTDBDataset(config);
    // second we need to check if we need to import RDF files to the RDF model
    // look if we need want to use an import filter
    Object value = config.get(PARAM_IMPORT_FILTER);
    if (value == null) {
        log.info("No RDF Import Filter configured");
        importFilter = null;
    } else {
        String[] filterNames = value.toString().split(",");
        List<RdfImportFilter> filters = new ArrayList<RdfImportFilter>();
        ClassLoader cl = indexingConfig.getClass().getClassLoader();
        for (String filterName : filterNames) {
            filterName = filterName.trim();
            try {
                Class<? extends RdfImportFilter> importFilterClass = cl.loadClass(filterName).asSubclass(RdfImportFilter.class);
                RdfImportFilter filter = importFilterClass.newInstance();
                filter.setConfiguration(config);
                filters.add(filter);
                log.info("Use RDF ImportFilter {} (type: {})", importFilter, importFilterClass.getSimpleName());
            } catch (ClassNotFoundException e) {
                throw new IllegalArgumentException("Configured RdfImportFilter '" + filterName + "' not found", e);
            } catch (InstantiationException e) {
                throw new IllegalArgumentException("Configured RdfImportFilter '" + filterName + "' can not be instantiated", e);
            } catch (IllegalAccessException e) {
                throw new IllegalArgumentException("Configured RdfImportFilter '" + filterName + "' can not be created", e);
            }
        }
        if (filters.isEmpty()) {
            this.importFilter = null;
        } else if (filters.size() == 1) {
            this.importFilter = filters.get(0);
        } else {
            this.importFilter = new UnionImportFilter(filters.toArray(new RdfImportFilter[filters.size()]));
        }
    }
    boolean failOnError = indexingConfig.isFailOnError();
    // create the ResourceLoader
    this.loader = new ResourceLoader(new RdfResourceImporter(indexingDataset, importFilter), failOnError);
    value = config.get(PARAM_IMPORTED_FOLDER);
    String importedFolderName;
    if (value != null && !value.toString().isEmpty()) {
        importedFolderName = value.toString();
    } else {
        importedFolderName = DEFAULT_IMPORTED_FOLDER_NAME;
    }
    File importedFolder = new File(indexingConfig.getSourceFolder(), importedFolderName);
    log.info("Imported RDF File Folder: {}", importedFolder);
    this.loader.setImportedDir(importedFolder);
    // check if importing is deactivated
    // default is true
    boolean importSource = true;
    value = config.get(PARAM_IMPORT_SOURCE);
    if (value != null) {
        importSource = Boolean.parseBoolean(value.toString());
    }
    if (importSource) {
        // if we need to import ... check the source config
        log.info("Importing RDF data from:");
        value = config.get(PARAM_SOURCE_FILE_OR_FOLDER);
        if (value == null) {
            // if not set use the default
            value = DEFAULT_SOURCE_FOLDER_NAME;
        }
        for (String source : value.toString().split(",")) {
            File sourceFileOrDirectory = indexingConfig.getSourceFile(source);
            if (sourceFileOrDirectory.exists()) {
                // register the configured source with the ResourceLoader
                this.loader.addResource(sourceFileOrDirectory);
            } else {
                if (FilenameUtils.getExtension(source).isEmpty()) {
                    // RDF files.
                    if (!sourceFileOrDirectory.mkdirs()) {
                        log.warn("Unable to create directory {} configured to improt RDF data from. " + "You will need to create this directory manually before copying the" + "RDF files into it.", sourceFileOrDirectory);
                        // this would not be necessary because the directory will
                        // be empty - however I like to be consistent and have
                        // all configured and existent files & dirs added the the
                        // resource loader
                        this.loader.addResource(sourceFileOrDirectory);
                    }
                } else {
                    log.warn("Unable to find RDF source {} within the indexing Source folder ", source, indexingConfig.getSourceFolder());
                }
            }
        }
        if (log.isInfoEnabled()) {
            for (String registeredSource : loader.getResources(ResourceState.REGISTERED)) {
                log.info(" > " + registeredSource);
            }
        }
    } else {
        log.info("Importing RDF data deactivated by parameer {}={}" + PARAM_IMPORT_SOURCE, value);
    }
    // STANBOL-765: parsed bnode-prefix from parsed configuration.
    value = config.get(PARAM_BNODE_STATE);
    final Boolean bnodeState;
    if (value != null) {
        bnodeState = value instanceof Boolean ? (Boolean) value : Boolean.parseBoolean(value.toString());
    } else if (config.containsKey(PARAM_BNODE_STATE)) {
        // support key without value
        bnodeState = true;
    } else {
        // undefined
        bnodeState = null;
    }
    if (bnodeState == null || bnodeState) {
        // null or enabled -> consider prefix
        value = config.get(PARAM_BNODE_PREFIX);
        if (value != null) {
            try {
                new URI(value.toString());
            } catch (URISyntaxException e) {
                throw new IllegalArgumentException("The configured " + PARAM_BNODE_PREFIX + "='" + value.toString() + "' MUST BE a valid URI!");
            }
            bnodePrefix = value.toString();
        } else if (bnodeState != null) {
            // use default prefix if bnodeState is true
            bnodePrefix = String.format("urn:bnode:%s:", indexingConfig.getName());
        }
    // else bnodeState == null and no custom prefix -> disable by default
    }
    if (bnodePrefix != null) {
        log.info("Indexing of Bnodes enabled (prefix: {}", bnodePrefix);
    } else {
        log.info("Indexing of Bnodes disabled");
    }
}
Also used : ResourceLoader(org.apache.stanbol.entityhub.indexing.core.source.ResourceLoader) IndexingConfig(org.apache.stanbol.entityhub.indexing.core.config.IndexingConfig) ArrayList(java.util.ArrayList) URISyntaxException(java.net.URISyntaxException) URI(java.net.URI) File(java.io.File)

Example 3 with ResourceLoader

use of org.apache.stanbol.entityhub.indexing.core.source.ResourceLoader in project stanbol by apache.

the class ResourceLoaderTest method testFolderWithoutProcessingArchives.

@Test
public void testFolderWithoutProcessingArchives() {
    String folder = rootDir + TEST_FOLDER_NAME;
    Collection<String> expectedFolderResources = new HashSet<String>(Arrays.asList(folder + "archiveInFolder.zip", folder + "archiveWithIgnore.zip", folder + "archiveWithError.zip", folder + "errorFileInFolder.txt", folder + "fileInFolder.txt", folder + "ignoreFileInFolder.txt", folder + "otherFileInFolder.txt"));
    DummyResourceImporter importer = new DummyResourceImporter(expectedFolderResources);
    ResourceLoader loader = new ResourceLoader(importer, false, false);
    loader.addResource(new File(rootDir, "testFolder"));
    assertEquals(expectedFolderResources, loader.getResources(ResourceState.REGISTERED));
    assertTrue(loader.getResources(ResourceState.ERROR).isEmpty());
    assertTrue(loader.getResources(ResourceState.LOADED).isEmpty());
    assertTrue(loader.getResources(ResourceState.IGNORED).isEmpty());
    loader.loadResources();
    assertEquals(new HashSet<String>(Arrays.asList(folder + "archiveInFolder.zip", folder + "fileInFolder.txt", folder + "otherFileInFolder.txt", folder + "archiveWithIgnore.zip", folder + "archiveWithError.zip")), loader.getResources(ResourceState.LOADED));
    assertTrue(loader.getResources(ResourceState.REGISTERED).isEmpty());
    assertEquals(new HashSet<String>(Arrays.asList(folder + "errorFileInFolder.txt")), loader.getResources(ResourceState.ERROR));
    assertEquals(new HashSet<String>(Arrays.asList(folder + "ignoreFileInFolder.txt")), loader.getResources(ResourceState.IGNORED));
}
Also used : ResourceLoader(org.apache.stanbol.entityhub.indexing.core.source.ResourceLoader) File(java.io.File) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 4 with ResourceLoader

use of org.apache.stanbol.entityhub.indexing.core.source.ResourceLoader in project stanbol by apache.

the class ResourceLoaderTest method testSingleFile.

@Test
public void testSingleFile() {
    DummyResourceImporter importer = new DummyResourceImporter(Arrays.asList(rootDir + "singleFileTest.txt"));
    ResourceLoader loader = new ResourceLoader(importer, false, false);
    loader.addResource(new File(rootDir, "singleFileTest.txt"));
    assertEquals(new HashSet<String>(Arrays.asList(rootDir + "singleFileTest.txt")), loader.getResources(ResourceState.REGISTERED));
    assertTrue(loader.getResources(ResourceState.ERROR).isEmpty());
    assertTrue(loader.getResources(ResourceState.LOADED).isEmpty());
    assertTrue(loader.getResources(ResourceState.IGNORED).isEmpty());
    loader.loadResources();
    assertEquals(new HashSet<String>(Arrays.asList(rootDir + "singleFileTest.txt")), loader.getResources(ResourceState.LOADED));
    assertTrue(loader.getResources(ResourceState.REGISTERED).isEmpty());
    assertTrue(loader.getResources(ResourceState.IGNORED).isEmpty());
    assertTrue(loader.getResources(ResourceState.ERROR).isEmpty());
    importer.checkAllProcessed();
}
Also used : ResourceLoader(org.apache.stanbol.entityhub.indexing.core.source.ResourceLoader) File(java.io.File) Test(org.junit.Test)

Example 5 with ResourceLoader

use of org.apache.stanbol.entityhub.indexing.core.source.ResourceLoader in project stanbol by apache.

the class ResourceLoaderTest method isFailedOnError.

private boolean isFailedOnError(boolean failOnError) {
    String folder = rootDir + TEST_FOLDER_NAME;
    boolean failed = false;
    DummyResourceImporter importer = new DummyResourceImporter(Arrays.asList(folder + "errorFileInFolder.txt"));
    ResourceLoader loader = new ResourceLoader(importer, false, failOnError);
    loader.addResource(new File(folder, "errorFileInFolder.txt"));
    try {
        loader.loadResources();
    } catch (IllegalStateException ex) {
        failed = true;
    }
    return failed;
}
Also used : ResourceLoader(org.apache.stanbol.entityhub.indexing.core.source.ResourceLoader) File(java.io.File)

Aggregations

File (java.io.File)7 ResourceLoader (org.apache.stanbol.entityhub.indexing.core.source.ResourceLoader)7 IndexingConfig (org.apache.stanbol.entityhub.indexing.core.config.IndexingConfig)3 Test (org.junit.Test)3 HashSet (java.util.HashSet)2 IOException (java.io.IOException)1 URI (java.net.URI)1 URISyntaxException (java.net.URISyntaxException)1 ArrayList (java.util.ArrayList)1 RepositoryException (org.openrdf.repository.RepositoryException)1 RepositoryConfigException (org.openrdf.repository.config.RepositoryConfigException)1 RepositoryFactory (org.openrdf.repository.config.RepositoryFactory)1