package edu.isistan.sadeditor.pages;
import java.util.Iterator;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.edit.domain.IEditingDomainProvider;
import org.eclipse.emf.edit.ui.util.EditUIUtil;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.editor.FormPage;
import org.eclipse.ui.forms.events.ExpansionAdapter;
import org.eclipse.ui.forms.events.ExpansionEvent;
import org.eclipse.ui.forms.widgets.ColumnLayout;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.wb.swt.ResourceManager;
import SadModel.Sad;
import SadModel.SadSection;
import edu.isistan.sadeditor.editor.Messages;
import edu.isistan.sadeditor.editor.SadEditor;
import edu.isistan.uima.unified.SadUIMAProcessor;
public class OverviewPage extends FormPage {
public static final String ID = "edu.isistan.sadeditor.pages.OverviewPage";
public static final String TITLE = "Overview";
private static final String UIMA_EXTENSION = "uimasad";
private EditingDomain editingDomain;
private Sad modelRoot;
private DataBindingContext bindingContext;
private ListViewer listViewerSections;
private Text overviewSourceText;
private String textSection="";
/**
* Create the form page.
* @param id
* @param title
*/
public OverviewPage() {
super(ID, TITLE);
}
/**
* @param editor
*/
public OverviewPage(FormEditor editor) {
super(editor, ID, TITLE);
editingDomain = ((IEditingDomainProvider)getEditor()).getEditingDomain();
modelRoot = ((SadEditor)getEditor()).getModelRoot();
bindingContext = ((SadEditor)getEditor()).getBindingContext();
}
/**
* @see org.eclipse.ui.forms.editor.FormPage#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
*/
@Override
public void init(IEditorSite site, IEditorInput input) {
super.init(site, input);
}
/**
* Create contents of the form.
* @param managedForm
*/
@Override
protected void createFormContent(IManagedForm managedForm) {
ScrolledForm form = managedForm.getForm();
Composite body = form.getBody();
FormToolkit toolkit = managedForm.getToolkit();
form.setText(Messages.SadEditor_OverviewTitle);
Action execution = new Action("run", Action.AS_CHECK_BOX){
public void run() {
executeUimaSadProcesor();
}
};
execution.setToolTipText("Run"); //$NON-NLS-1$
execution.setEnabled(Boolean.TRUE);
execution.setImageDescriptor(ResourceManager.getPluginImageDescriptor("edu.isistan.sadeditor", "icons/run.gif"));
form.getToolBarManager().add(execution);
form.getToolBarManager().update(true);
toolkit.decorateFormHeading(form.getForm());
toolkit.paintBordersFor(body);
ColumnLayout layout = new ColumnLayout();
layout.topMargin = 10;
layout.bottomMargin = 5;
layout.leftMargin = 10;
layout.rightMargin = 10;
layout.horizontalSpacing = 20;
layout.verticalSpacing = 20;
layout.maxNumColumns = 2;
layout.minNumColumns = 2;
toolkit.paintBordersFor(body);
managedForm.getForm().getBody().setLayout(layout);
createDetailSection(managedForm, Messages.Sad_OverviewDetail, Messages.Sad_OverviewDescription1);
createExecutionSection(managedForm, Messages.Sad_OverviewRunSection, Messages.Sad_OverviewDescription3);
createTreeModel(managedForm, Messages.Sad_OverviewModelTree,Messages.Sad_OverviewDescription2);
createViewSection(managedForm, Messages.Sad_OverviewViewSection, Messages.Sad_OverviewDescription4);
}
private void createViewSection(IManagedForm managedForm, String title, String desc) {
Composite client = createSection(managedForm, title, desc, 2);
FormToolkit toolkit = managedForm.getToolkit();
GridData gd = new GridData(GridData.FILL_BOTH);
toolkit.paintBordersFor(client);
gd = new GridData(GridData.VERTICAL_ALIGN_BEGINNING);
toolkit.createLabel(client,"");
overviewSourceText = toolkit.createText(client, textSection, SWT.V_SCROLL);
overviewSourceText.setEditable(false);
gd = new GridData();
gd.widthHint = 700;
gd.heightHint= 300;
overviewSourceText.setLayoutData(gd);
listViewerSections.addSelectionChangedListener(new ISelectionChangedListener(){
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection)event.getSelection();
for(Iterator<SadSection> it = modelRoot.getSections().iterator();it.hasNext();){
SadSection section = it.next();
if(null != section.getText() && section.getName().equals(selection.getFirstElement())){
overviewSourceText.setText(section.getText());
overviewSourceText.update();
}
}
}
});
}
private void createExecutionSection(IManagedForm mform, String title, String desc) {
Composite client = createSection(mform, title, desc, 2);
FormToolkit toolkit = mform.getToolkit();
// Run
Button btnAdd= toolkit.createButton(client, Messages.Sad_OverviewRun,SWT.BUTTON1);
btnAdd.setImage(ResourceManager.getPluginImage("edu.isistan.sadeditor", "icons/run.gif"));
btnAdd.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
executeUimaSadProcesor();
}
});
}
private void executeUimaSadProcesor() {
URI resourceURI = EditUIUtil.getURI(getEditorInput());
String inputFile =resourceURI.toString();
IFile file =(IFile)getEditorInput().getAdapter(IFile.class);
String outputFile = file.getLocationURI().toString();
outputFile= (String) outputFile.subSequence(0, outputFile.length()-3);
outputFile+=UIMA_EXTENSION;
SadUIMAProcessor processor = SadUIMAProcessor.getInstance();
processor.execute(inputFile, outputFile);
try {
file.getParent().refreshLocal(IResource.DEPTH_ONE, null);
} catch (CoreException e) {
e.printStackTrace();
}
pruebaLevantarModelo(file);
}
private void pruebaLevantarModelo(IFile file) {
String reaURI = file.getFullPath().toString();
ResourceSet resourceSet = new ResourceSetImpl();
URI fileURI = URI.createPlatformResourceURI(reaURI, true);
Resource resource = resourceSet.createResource(fileURI);
resource.getContents();
// REAssistantProject rootModel = createInitialModel();
}
private void createDetailSection(IManagedForm mform, String title, String desc) {
Composite client = createSection(mform, title, desc, 2);
FormToolkit toolkit = mform.getToolkit();
GridData gd = new GridData();
// Text source
toolkit.createLabel(client, Messages.SadEditor_OverviewSource+":");
String overviewSource = modelRoot.getTitle();
Text overviewSourceText = toolkit.createText(client, overviewSource, SWT.SINGLE);
overviewSourceText.setEditable(false);
gd = new GridData();
gd.widthHint = 500;
overviewSourceText.setLayoutData(gd);
// Text Template Sad
toolkit.createLabel(client, Messages.SadEditor_OverviewTemplate+":");
String overviewTemplate = modelRoot.getTemplatePath();
Text overviewTemplateText = toolkit.createText(client, overviewTemplate, SWT.SINGLE);
overviewTemplateText.setEditable(false);
gd = new GridData();
gd.widthHint = 500;
overviewTemplateText.setLayoutData(gd);
}
private void createTreeModel(IManagedForm managedForm, String title, String desc) {
Composite client = createSection(managedForm, title, desc, 2);
listViewerSections = new ListViewer(client, SWT.BORDER | SWT.V_SCROLL);
for(Iterator<SadSection> it = modelRoot.getSections().iterator();it.hasNext();){
SadSection section = it.next();
if(null != section.getName()){
listViewerSections.add(section.getName());
}
}
GridData gd = new GridData();
gd.widthHint = 500;
gd.heightHint = 100;
List listSections = listViewerSections.getList();
listSections.setLayoutData(gd);
}
private Composite createSection(IManagedForm mform, String title,
String desc, int numColumns) {
final ScrolledForm form = mform.getForm();
FormToolkit toolkit = mform.getToolkit();
Composite compositeDetails = new Composite(mform.getForm().getBody(), SWT.NONE);
compositeDetails.setLayout(new FillLayout(SWT.HORIZONTAL));
toolkit.adapt(compositeDetails);
toolkit.paintBordersFor(compositeDetails);
Section section = toolkit.createSection(compositeDetails, Section.TWISTIE
| Section.TITLE_BAR | Section.DESCRIPTION | Section.EXPANDED);
section.setText(title);
section.setDescription(desc);
//toolkit.createCompositeSeparator(section);
Composite client = toolkit.createComposite(section);
GridLayout layout = new GridLayout();
layout.marginWidth = layout.marginHeight = 0;
layout.numColumns = numColumns;
client.setLayout(layout);
section.setClient(client);
section.addExpansionListener(new ExpansionAdapter() {
public void expansionStateChanged(ExpansionEvent e) {
form.reflow(false);
}
});
return client;
}
@Override
public void setActive(boolean active) {
super.setActive(active);
}
}