package org.zend.php.zendserver.deployment.ui.editors.text; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Path; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorReference; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.FileEditorInput; import org.eclipse.wst.validation.internal.provisional.core.IReporter; import org.eclipse.wst.validation.internal.provisional.core.IValidationContext; import org.eclipse.wst.validation.internal.provisional.core.IValidator; import org.zend.php.zendserver.deployment.core.descriptor.IDescriptorContainer; import org.zend.php.zendserver.deployment.core.internal.validation.DescriptorSemanticValidator; import org.zend.php.zendserver.deployment.core.internal.validation.DescriptorValidator; import org.zend.php.zendserver.deployment.core.internal.validation.ValidationStatus; import org.zend.php.zendserver.deployment.ui.editors.DeploymentDescriptorEditor; public class DescriptorReconcilingStrategy implements IValidator { private DescriptorSemanticValidator validator = new DescriptorSemanticValidator(); public DescriptorReconcilingStrategy() { } @Override public void cleanup(IReporter reporter) { } public void validate(IValidationContext helper, IReporter reporter) { List<IEditorReference> editors = findEditors(helper); for (IEditorReference ref : editors) { DeploymentDescriptorEditor editor = (DeploymentDescriptorEditor) ref .getEditor(true); IDescriptorContainer container = editor.getDescriptorContainer(); container.load(); validator.setFile(container.getFile()); ValidationStatus[] statuses = validator.validate( container.getDescriptorModel(), editor.getDocument()); DescriptorValidator.reportProblems(container.getFile(), statuses); } } private List<IEditorReference> findEditors(IValidationContext helper) { String[] path = helper.getURIs(); if (path.length == 0) return null; IFile file = ResourcesPlugin.getWorkspace().getRoot() .getFile(new Path(path[0])); if (file == null) return null; return getEditors(new FileEditorInput(file)); } private List<IEditorReference> getEditors(final IEditorInput editorInput) { final List<IEditorReference> editors = new ArrayList<IEditorReference>(); Display.getDefault().syncExec(new Runnable() { // needs UI thread to retrieve active page public void run() { IWorkbenchPage activePage = PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getActivePage(); if (activePage != null) { IEditorReference[] refs = activePage.findEditors( editorInput, DeploymentDescriptorEditor.ID, IWorkbenchPage.MATCH_ID | IWorkbenchPage.MATCH_INPUT); editors.addAll(Arrays.asList(refs)); } } }); return editors; } }