/******************************************************************************* * Copyright (c) 2010 SAP AG. * 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: * Emil Simeonov - initial API and implementation. * Dimitar Donchev - initial API and implementation. * Dimitar Tenev - initial API and implementation. * Nevena Manova - initial API and implementation. * Georgi Konstantinov - initial API and implementation. *******************************************************************************/ package org.eclipse.wst.sse.sieditor.ui.preedit; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.wst.sse.sieditor.core.common.Logger; import org.eclipse.wst.sse.sieditor.ui.Activator; public class PreEditService { private static final String EXTENSION_POINT = ".esmSIEditorPreEditListener"; //$NON-NLS-1$ private static final String EXTENSION_POINT_ATTRIBUTE = "listener"; //$NON-NLS-1$ private List<ISIEditorPreEditListener> preEditListeners = new ArrayList<ISIEditorPreEditListener>(); private static PreEditService singletonInstance; private PreEditService(){ } public static PreEditService getInstance(){ if(null==singletonInstance) singletonInstance = new PreEditService(); return singletonInstance; } public boolean startEdit(Object editedObject){ //return true; //TODO enable the DTR checkout logic after testing it return informListenersOfEdit(editedObject); } public boolean startDelete(Object deletedObject){ //return true; //TODO enable the DTR checkout logic after testing it return informListenersOfDelete(deletedObject); } private boolean informListenersOfEdit(Object editedObject){ boolean result=true; //if there are no listeners the result should be true for(ISIEditorPreEditListener listener: getPreEditListeners()){ result = result && listener.startObjectEdit(editedObject); if(!result) return result; } return result; } private boolean informListenersOfDelete(Object deletedObject){ boolean result=true; //if there are no listeners the result should be true for(ISIEditorPreEditListener listener: getPreEditListeners()){ result = result && listener.startObjectDelete(deletedObject); if(!result) return result; } return result; } private List<ISIEditorPreEditListener> getExecutableExtension( String attributeName) { List<ISIEditorPreEditListener> extensions = new ArrayList<ISIEditorPreEditListener>(); IExtensionPoint point = Platform.getExtensionRegistry() .getExtensionPoint( Activator.getDefault().getBundle().getSymbolicName() + EXTENSION_POINT); if (null!=point) { for (IExtension extension : point.getExtensions()) { for (IConfigurationElement config : extension .getConfigurationElements()) { try { if (null!=config.getAttribute(attributeName)) { extensions.add((ISIEditorPreEditListener) config .createExecutableExtension(attributeName)); } } catch (Exception e) { Logger.log(Activator.PLUGIN_ID, IStatus.ERROR, "Can not create executable extension for " + EXTENSION_POINT + //$NON-NLS-1$ " Element name=" + config.getName() + //$NON-NLS-1$ ", value=" + config.getValue(), e); //$NON-NLS-1$ } } } } return extensions; } public List<ISIEditorPreEditListener> getPreEditListeners() { if(preEditListeners.isEmpty()) { List<ISIEditorPreEditListener> listeners = getExecutableExtension(EXTENSION_POINT_ATTRIBUTE); for(ISIEditorPreEditListener listener: listeners) { preEditListeners.add(listener); } } return preEditListeners; } }