/*
* Copyright (c) 2013-2015 Josef Hardi <josef.hardi@gmail.com>
*
* Licensed 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 com.obidea.semantika.app;
import java.io.File;
import java.io.InputStream;
import java.net.URI;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.obidea.semantika.database.IDatabase;
import com.obidea.semantika.io.FileDocumentSource;
import com.obidea.semantika.io.IDocumentSource;
import com.obidea.semantika.io.StreamDocumentSource;
import com.obidea.semantika.io.UriDocumentSource;
import com.obidea.semantika.mapping.IMappingFactory;
import com.obidea.semantika.mapping.IMappingSet;
import com.obidea.semantika.mapping.exception.MappingCreationException;
import com.obidea.semantika.mapping.exception.MappingFactoryNotFoundException;
import com.obidea.semantika.mapping.parser.MappingParserConfiguration;
import com.obidea.semantika.ontology.IOntology;
public class MappingLoader extends MappingLoaderBase
{
private MetaModel mMetaModel;
private List<IMappingFactory> mMappingSetFactories = new ArrayList<IMappingFactory>();
public MappingLoader(IDatabase database, IOntology ontology)
{
mMetaModel = MetaModel.getInstance(database, ontology);
}
public void addMappingSetFactory(IMappingFactory factory)
{
mMappingSetFactories.add(0, factory);
factory.setMetaModel(mMetaModel);
}
public List<IMappingFactory> getMappingSetFactories()
{
return Collections.unmodifiableList(mMappingSetFactories);
}
public IMappingSet loadMappingFromDocument(File file) throws MappingCreationException
{
return loadMappingFromDocument(new FileDocumentSource(file));
}
public IMappingSet loadMappingFromDocument(InputStream inputStream) throws MappingCreationException
{
return loadMappingFromDocument(new StreamDocumentSource(inputStream));
}
public IMappingSet loadMappingFromDocument(URI documentUri) throws MappingCreationException
{
return loadMappingFromDocument(new UriDocumentSource(documentUri));
}
private IMappingSet loadMappingFromDocument(IDocumentSource inputDocument) throws MappingCreationException
{
return loadMapping(inputDocument, new MappingParserConfiguration());
}
public IMappingSet loadMappingFromDocument(File file, MappingParserConfiguration configuration)
throws MappingCreationException
{
return loadMapping(new FileDocumentSource(file), configuration);
}
public IMappingSet loadMappingFromDocument(InputStream inputStream, MappingParserConfiguration configuration)
throws MappingCreationException
{
return loadMapping(new StreamDocumentSource(inputStream), configuration);
}
public IMappingSet loadMappingFromDocument(URI documentUri, MappingParserConfiguration configuration)
throws MappingCreationException
{
return loadMapping(new UriDocumentSource(documentUri), configuration);
}
@Override
protected IMappingSet loadMapping(IDocumentSource inputDocument, MappingParserConfiguration configuration)
throws MappingCreationException
{
for (IMappingFactory factory : mMappingSetFactories) {
if (factory.canLoad(inputDocument)) {
return factory.loadMappingSet(inputDocument, this, configuration);
}
}
throw new MappingFactoryNotFoundException(inputDocument.getDocumentUri());
}
}