/*******************************************************************************
* Copyright (c) 2006-2012
* Software Technology Group, Dresden University of Technology
* DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Software Technology Group - TU Dresden, Germany;
* DevBoost GmbH - Berlin, Germany
* - initial API and implementation
******************************************************************************/
package org.reuseware.coconut.test.sokan;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.reuseware.coconut.resource.ReuseResources;
import org.reuseware.coconut.resource.sokan.FragmentResourceFactory;
import org.reuseware.coconut.resource.sokan.SokanFragmentCompositionInterfaceCreator;
import org.reuseware.coconut.resource.sokan.SokanReuseResourceAccess;
import org.reuseware.coconut.resource.sokan.SokanReuseResourceDependencyCalculator;
import org.reuseware.coconut.resource.sokan.emodeler.FragmentEModeler;
import org.reuseware.coconut.resource.sokan.emodeler.MetaArtifactEModeler;
import org.reuseware.coconut.resource.sokan.emodeler.RexActivatorEModeler;
import org.reuseware.coconut.resource.sokan.generators.ComposedFragmentsGenerator;
import org.reuseware.coconut.resource.sokan.generators.DerivedCompositionProgramGenerator;
import org.reuseware.coconut.resource.sokan.generators.FragmentCompositionInterfaceGenerator;
import org.reuseware.coconut.resource.sokan.indexer.CompositionProgramSourceIndexer;
import org.reuseware.coconut.resource.sokan.indexer.DiagramIndexer;
import org.reuseware.coconut.resource.sokan.indexer.ReuseResourceDependencyIndexer;
import org.reuseware.coconut.resource.sokan.indexer.RootEClassIndexer;
import org.reuseware.coconut.test.AbstractReusewareTestHelper;
import org.reuseware.sokan.index.emodeler.EModeler;
import org.reuseware.sokan.index.emodeler.EModelerManager;
import org.reuseware.sokan.index.indexer.Indexer;
import org.reuseware.sokan.index.indexer.IndexerConfiguration;
import org.reuseware.sokan.index.persister.PersistencyManager;
import org.reuseware.sokan.index.solr.SolrPersister;
import org.reuseware.sokan.index.util.IndexUtil;
import org.reuseware.sokan.index.util.ResourceUtil;
import org.reuseware.sokan.index.util.StoreUtil;
public class SokanReusewareTestHelper extends AbstractReusewareTestHelper {
protected URI createURI(String path) throws IOException {
File file = new File(path);
return URI.createFileURI(file.getCanonicalPath());
}
private void newIndexer(
Indexer indexer, Indexer[] dependencies) {
String id = indexer.getClass().getCanonicalName();
List<String> depIDs = new ArrayList<String>();
for(Indexer depIndexer : dependencies) {
String depID = null;
if (depIndexer == null) {
depID = "Foo";
}
else {
depID = depIndexer.getClass().getCanonicalName();
}
depIDs.add(depID);
}
IndexUtil.INSTANCE.addIndexer(
new IndexerConfiguration(indexer, id, depIDs));
}
private void newEModeler(EModeler modeler) {
EModelerManager.getEModelers().add(modeler);
}
private void pluginXMLReuseware() {
Indexer rootEClassIndexer = new RootEClassIndexer();
Indexer diagramIndexer = new DiagramIndexer();
Indexer depIndexer = new ReuseResourceDependencyIndexer();
Indexer cpSourceIndexer = new CompositionProgramSourceIndexer();
Indexer ciIndexer = new FragmentCompositionInterfaceGenerator();
Indexer derivedCPIndexer = new DerivedCompositionProgramGenerator();
Indexer composedFragmentIndexer = new ComposedFragmentsGenerator();
EModeler fragmentEModeler = new FragmentEModeler();
EModeler rexActivatorEModeler = new RexActivatorEModeler();
EModeler metaArtifactEModeler = new MetaArtifactEModeler();
newIndexer(rootEClassIndexer, new Indexer[]{});
newIndexer(diagramIndexer, new Indexer[]{});
newIndexer(depIndexer, new Indexer[]{rootEClassIndexer});
newIndexer(cpSourceIndexer, new Indexer[]{depIndexer});
newIndexer(ciIndexer, new Indexer[]{depIndexer});
newIndexer(derivedCPIndexer, new Indexer[]{cpSourceIndexer});
newIndexer(composedFragmentIndexer, new Indexer[]{derivedCPIndexer});
newEModeler(fragmentEModeler);
newEModeler(rexActivatorEModeler);
newEModeler(metaArtifactEModeler);
}
@Override
protected void initReuseResources(Map<?, ?> options) throws IOException {
if (IndexUtil.INSTANCE.getIndexerConfigurations().isEmpty()) {
AbstractReusewareTestHelper.deleteDirectory(new File(".metadata"), true, true);
IndexUtil.INSTANCE.setPersistencyManager(
new PersistencyManager(new SolrPersister()));
for (Map.Entry<?, ?> entry : options.entrySet()) {
IndexUtil.INSTANCE.addLoadOption(entry.getKey().toString(), entry.getValue());
}
pluginXMLReuseware();
}
SokanReuseResourceAccess access =
new SokanReuseResourceAccess();
SokanReuseResourceDependencyCalculator dependencyCalculator =
new SokanReuseResourceDependencyCalculator();
SokanFragmentCompositionInterfaceCreator ciCreator =
new SokanFragmentCompositionInterfaceCreator();
Resource.Factory.Registry.INSTANCE.getProtocolToFactoryMap().put(
"reuseware", new FragmentResourceFactory());
ReuseResources.INSTANCE.init(access, dependencyCalculator, ciCreator);
}
@Override
protected void registerStore(URI storeFolderURI) {
StoreUtil.INSTANCE.addExternalStore(storeFolderURI);
}
@Override
protected boolean registerArtifact(URI uri) {
IndexUtil.INSTANCE.addArtifact(uri);
IndexUtil.INSTANCE.commitIndex();
return IndexUtil.INSTANCE.getIndex(ResourceUtil.idFrom(uri)) != null;
}
@Override
protected void update() {
IndexUtil.INSTANCE.commitIndex();
}
}