package de.urszeidler.shr5.ecp.views;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.databinding.observable.value.WritableValue;
import org.eclipse.emf.common.ui.DiagnosticComposite;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.databinding.swt.WidgetProperties;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IPartListener2;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchPartReference;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.wb.swt.SWTResourceManager;
import de.urszeidler.eclipse.shr5.Beschreibbar;
import de.urszeidler.eclipse.shr5Management.CharacterGenerator;
import de.urszeidler.shr5.ecp.editor.ShadowrunEditor;
import de.urszeidler.shr5.ecp.service.ValidationService;
import de.urszeidler.shr5.ecp.service.ValidationTarget;
public class GeneratorValidationView extends ViewPart implements ValidationTarget {
protected DataBindingContext m_bindingContext;
public static final String ID = "de.urszeidler.shr5.ecp.GeneratorValidationView"; //$NON-NLS-1$
// Create an IPartListener2
IPartListener2 pl = new IPartListener2() {
// If the Editor I'm interested in was updated ...
public void partActivated(IWorkbenchPartReference ref) {
IWorkbenchPart part = ref.getPart(true);
if (part instanceof ShadowrunEditor) {
EObject eObject = ((ShadowrunEditor)part).getEObject();
validationService.updateValidation(eObject);
}
}
@Override
public void partBroughtToTop(IWorkbenchPartReference partRef) {
}
@Override
public void partClosed(IWorkbenchPartReference partRef) {
}
@Override
public void partDeactivated(IWorkbenchPartReference partRef) {
}
@Override
public void partOpened(IWorkbenchPartReference partRef) {
}
@Override
public void partHidden(IWorkbenchPartReference partRef) {
}
@Override
public void partVisible(IWorkbenchPartReference partRef) {
}
@Override
public void partInputChanged(IWorkbenchPartReference partRef) {
}
};
private ValidationService validationService;
private WritableValue object = new WritableValue(null, String.class);
private DiagnosticComposite diagnosticComposite;
private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
private Label lblNewLabel;
public GeneratorValidationView() {
}
/*
* (non-Javadoc) Method declared on IViewPart.
*/
@Override
public void init(IViewSite site) throws PartInitException {
IWorkbenchPage page = site.getPage();
// page.addSelectionListener(this);
page.addPartListener(pl);
validationService = (ValidationService)site.getService(ValidationService.class);
validationService.registerValidationTarget(this);
super.init(site);
}
/**
* Create contents of the view part.
*
* @param parent
*/
@Override
public void createPartControl(Composite parent) {
Composite container = new Composite(parent, SWT.NONE);
container.setLayout(new GridLayout(1, false));
Composite composite = formToolkit.createComposite(container, SWT.BORDER);
composite.setLayout(new GridLayout(1, false));
composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
formToolkit.paintBordersFor(composite);
lblNewLabel = formToolkit.createLabel(composite, "New Label", SWT.NONE);
lblNewLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
diagnosticComposite = new DiagnosticComposite(container, SWT.NONE);
diagnosticComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
diagnosticComposite.setBackground(SWTResourceManager.getColor(255, 255, 255));
diagnosticComposite.setSeverityMask(Diagnostic.ERROR | Diagnostic.INFO | Diagnostic.WARNING);
diagnosticComposite.setShowRootDiagnostic(false);
diagnosticComposite.initialize(null);
createActions();
initializeToolBar();
initializeMenu();
m_bindingContext = initDataBindings();
}
/**
* Create the actions.
*/
private void createActions() {
// Create the actions
}
/**
* Initialize the toolbar.
*/
private void initializeToolBar() {
// IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
}
/**
* Initialize the menu.
*/
private void initializeMenu() {
// IMenuManager menuManager = getViewSite().getActionBars().getMenuManager();
}
@Override
public void setFocus() {
// Set the focus
}
@Override
public void setValidation(EObject eobject, final Diagnostic diagnostic) {
if (eobject instanceof Beschreibbar) {
Beschreibbar beschreibbar = (Beschreibbar)eobject;
object.setValue(beschreibbar.getName());
} else if (eobject instanceof CharacterGenerator) {
CharacterGenerator<?> cg = (CharacterGenerator<?>)eobject;
object.setValue(cg.getCharacterName());
}
if (!diagnosticComposite.isDisposed())
getSite().getShell().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
if (!diagnosticComposite.isDisposed()) {
diagnosticComposite.setDiagnostic(diagnostic);
diagnosticComposite.update();
}
}
});
}
protected DataBindingContext initDataBindings() {
DataBindingContext bindingContext = new DataBindingContext();
//
IObservableValue observeTextLblNewLabelObserveWidget = WidgetProperties.text().observe(lblNewLabel);
bindingContext.bindValue(observeTextLblNewLabelObserveWidget, object, new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER), null);
//
return bindingContext;
}
}