/***************************************************************************** * Copyright (c) 2010 CEA LIST. * * * 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 * *****************************************************************************/ package org.eclipse.papyrus.infra.core.modelsetquery.impl; import org.eclipse.emf.common.notify.Adapter; import org.eclipse.emf.common.util.EList; import org.eclipse.papyrus.infra.core.modelsetquery.IModelSetQueryAdapter; import org.eclipse.papyrus.infra.core.resource.IModelSetSnippet; import org.eclipse.papyrus.infra.core.resource.ModelSet; /** * This snippet take in charge the initialization of the TypeCache. The snippet * is attached to the {@link ModelSet} (in the extensions), and called right * after ModelsManager is initialized. * * @author cedric dumoulin * */ public class ModelSetQueryInitializer implements IModelSetSnippet { /** * The type cache adapter used to reference elements from a type */ private IModelSetQueryAdapter modelQueryAdapter; /** * @see org.eclipse.papyrus.resource.IModelSetSnippet#start(org.eclipse.papyrus.resource.ModelSet) * * @param modelsManager */ public void start(ModelSet modelsManager) { EList<Adapter> eAdapters = modelsManager.eAdapters(); boolean found = false; for(Adapter adapter : eAdapters) { if(adapter instanceof IModelSetQueryAdapter) { found = true; modelQueryAdapter = (IModelSetQueryAdapter)adapter; } } if(!found) { modelQueryAdapter = createDefaultIModelSetQueryAdapter(); if (modelQueryAdapter instanceof Adapter) { eAdapters.add((Adapter) modelQueryAdapter); } } } public static IModelSetQueryAdapter createDefaultIModelSetQueryAdapter() { // for big models size matters TODO change the implementation to provide options return new ModelSetQueryAdapterSizeMatters(); } /** * @see org.eclipse.papyrus.resource.IModelSetSnippet#dispose(org.eclipse.papyrus.resource.ModelSet) * * @param modelsManager */ public void dispose(ModelSet modelsManager) { if(modelQueryAdapter instanceof Adapter) { modelsManager.eAdapters().remove(modelQueryAdapter); } } }