@startuml

package "(obda-core)\nspec.mapping" {
	interface Mapping
}

package "(optimization)\niq.optimizer" {
	interface IQOptimizer {
		optimize(IQ): IQ
	}
}

package "(optimization)\niq.optimizer.impl" {
	class AbstractIntensionalQueryMerger
	IQOptimizer <|.. AbstractIntensionalQueryMerger
}

package "" as settings <<Rectangle>>
{
	package "(reformulation-core)\nanswering.reformulation\n.unfolding" #FFFFEE
	{
		interface QueryUnfolder
		IQOptimizer <|-- QueryUnfolder
	}
	
	package "(reformulation-core)\nanswering.reformulation\n.unfolding.impl" #FFFFEE
	{
		class BasicQueryUnfolder {
			ctor(Mapping,\n  IntermediateQueryFactory,\n  SubstitutionFactory,\n  QueryTransformerFactory,\n  UnionBasedQueryMerger,\n  CoreUtilsFactory)
		}
		AbstractIntensionalQueryMerger <|-- BasicQueryUnfolder
		QueryUnfolder <|.. BasicQueryUnfolder
		BasicQueryUnfolder .> Mapping
	}
	
	package "(reformulation-core)\ninjection"
	{
		interface TranslationFactory <<DIF>> {
			create(Mapping): QueryUnfolder\n...
		}
		TranslationFactory ..> QueryUnfolder: <<creates>>
	}
}



@enduml