/*******************************************************************************
* Copyright (c) 2008, 2011 Obeo.
* 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:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.emf.eef.runtime.ui.gwt;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.eclipse.emf.common.command.BasicCommandStack;
import org.eclipse.emf.common.util.Callback;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EAnnotation;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.URIService;
import org.eclipse.emf.ecore.resource.URIServiceAsync;
import org.eclipse.emf.ecore.resource.URIServiceCallback;
import org.eclipse.emf.ecore.resource.impl.BinaryResourceImpl;
import org.eclipse.emf.ecore.resource.impl.ResourceFactoryImpl;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
import org.eclipse.emf.eef.runtime.ui.gwt.editor.EEFEditor;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.ui.RootPanel;
/**
* @author glefur
*
*/
public abstract class EEFEditorEntryPoint implements EntryPoint {
private AdapterFactoryEditingDomain editingDomain;
private List<Resource> originalResources;
public AdapterFactoryEditingDomain initializeEditingDomain() {
ComposedAdapterFactory composedAdapterFactory = new ComposedAdapterFactory();
composedAdapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
configureItemProviderAdapterFactories(composedAdapterFactory);
composedAdapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
final BasicCommandStack commandStack = new BasicCommandStack();
return new AdapterFactoryEditingDomain(composedAdapterFactory, commandStack);
}
public void configureResourceSet(final ResourceSet resourceSet) {
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(Resource.Factory.Registry.DEFAULT_EXTENSION, new ResourceFactoryImpl() {
@Override
public Resource createResource(URI uri) {
return new BinaryResourceImpl(uri);
}
});
final URIServiceAsync uriService = GWT.create(URIService.class);
URIServiceCallback uriServiceCallback = new URIServiceCallback(uriService);
resourceSet.getURIConverter().getURIHandlers().add(uriServiceCallback);
originalResources = new ArrayList<Resource>();
Resource listingResource = resourceSet.getResource(URI.createURI("datastore:/"), new Callback<Resource>() {
public void onFailure(Throwable caught) {
System.err.println("Failed");
caught.printStackTrace();
}
public void onSuccess(Resource result) {
EAnnotation eAnnotation = (EAnnotation) result.getContents().get(0);
for (Map.Entry<String, String> entry : eAnnotation.getDetails()) {
resourceSet.createResource(URI.createURI(entry.getKey()));
}
originalResources.clear();
originalResources.addAll(resourceSet.getResources());
}
});
resourceSet.getResources().remove(listingResource);
registerPackages(resourceSet.getPackageRegistry());
}
public void onModuleLoad() {
editingDomain = initializeEditingDomain();
configureResourceSet(editingDomain.getResourceSet());
EEFEditor mainPanel = new EEFEditor(editingDomain, editingDomain.getAdapterFactory(), getApplicationTitle(), Unit.PX);
mainPanel.setOriginalResources(originalResources);
RootPanel.get("main").add(mainPanel);
}
protected abstract void registerPackages(EPackage.Registry ePackageRegistry);
protected void configureItemProviderAdapterFactories(ComposedAdapterFactory adapterFactory) {
// Do nothing.
}
protected abstract String getApplicationTitle();
}