/**
* This file is protected by Copyright.
* Please refer to the COPYRIGHT file distributed with this source distribution.
*
* This file is part of REDHAWK IDE.
*
* 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 gov.redhawk.core.graphiti.sad.ui.editor;
import java.io.IOException;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.graphiti.mm.pictograms.Diagram;
import org.eclipse.graphiti.mm.pictograms.PictogramLink;
import org.eclipse.graphiti.mm.pictograms.PictogramsFactory;
import org.eclipse.graphiti.services.Graphiti;
import org.eclipse.graphiti.ui.editor.DiagramEditorInput;
import org.eclipse.ui.IEditorInput;
import gov.redhawk.core.graphiti.sad.ui.diagram.providers.SADDiagramTypeProvider;
import gov.redhawk.core.graphiti.ui.editor.AbstractGraphitiMultiPageEditor;
import gov.redhawk.core.graphiti.ui.util.DUtil;
import gov.redhawk.model.sca.commands.NonDirtyingCommand;
import mil.jpeojtrs.sca.prf.provider.PrfItemProviderAdapterFactory;
import mil.jpeojtrs.sca.sad.SoftwareAssembly;
import mil.jpeojtrs.sca.sad.provider.SadItemProviderAdapterFactory;
import mil.jpeojtrs.sca.scd.provider.ScdItemProviderAdapterFactory;
import mil.jpeojtrs.sca.spd.provider.SpdItemProviderAdapterFactory;
/**
* The multi-page editor for SAD files / runtime waveforms. Includes a Graphiti diagram.
*/
public abstract class AbstractGraphitiSADEditor extends AbstractGraphitiMultiPageEditor {
public static final String ID = "gov.redhawk.ide.graphiti.sad.ui.editor.presentation.SadEditorID";
public static final String EDITING_DOMAIN_ID = "mil.jpeojtrs.sca.sad.diagram.EditingDomain";
public AbstractGraphitiSADEditor() {
super();
}
protected SoftwareAssembly getSoftwareAssembly() {
return SoftwareAssembly.Util.getSoftwareAssembly(getMainResource());
}
@Override
protected EObject getMainObject() {
return getSoftwareAssembly();
}
@Override
protected IEditorInput createDiagramInput() throws IOException, CoreException {
// Create the diagram resource which will hold information only relevant to the Graphiti diagram
final URI diagramURI = DUtil.getDiagramResourceURI(SadDiagramUtilHelper.INSTANCE, getMainResource());
DUtil.initializeDiagramResource(SadDiagramUtilHelper.INSTANCE, SADDiagramTypeProvider.DIAGRAM_TYPE_ID, getDiagramTypeProviderID(), diagramURI);
Resource diagramResource = getEditingDomain().getResourceSet().getResource(diagramURI, true);
final Diagram diagram = (Diagram) diagramResource.getContents().get(0);
// Link the diagram with the SAD
NonDirtyingCommand.execute(diagram, new NonDirtyingCommand() {
@Override
public String getLabel() {
return "Link diagram with SAD file";
}
@Override
public void execute() {
// set property specifying diagram context (design, local, domain)
Graphiti.getPeService().setPropertyValue(diagram, DUtil.DIAGRAM_CONTEXT, getDiagramContext());
// link diagram and SAD
PictogramLink link = PictogramsFactory.eINSTANCE.createPictogramLink();
link.getBusinessObjects().add(getSoftwareAssembly());
diagram.setLink(link);
// Potentially link other objects in child classes
addDiagramLinks(diagram);
}
});
// return editor input from diagram with sad diagram type
return DiagramEditorInput.createEditorInput(diagram, getDiagramTypeProviderID());
}
/**
* Subclasses may override to add additional business objects to the diagram (e.g., runtime waveform).
* @param diagram
*/
protected void addDiagramLinks(Diagram diagram) {
}
@Override
public String getEditingDomainId() {
return AbstractGraphitiSADEditor.EDITING_DOMAIN_ID;
}
@Override
protected AdapterFactory getSpecificAdapterFactory() {
final ComposedAdapterFactory factory = new ComposedAdapterFactory();
factory.addAdapterFactory(new SadItemProviderAdapterFactory());
factory.addAdapterFactory(new EcoreItemProviderAdapterFactory());
factory.addAdapterFactory(new SpdItemProviderAdapterFactory());
factory.addAdapterFactory(new ScdItemProviderAdapterFactory());
factory.addAdapterFactory(new PrfItemProviderAdapterFactory());
return factory;
}
@Override
public boolean isPersisted(final Resource resource) {
return resource.getURI().equals(getSoftwareAssembly().eResource().getURI()) && super.isPersisted(resource);
}
}