package org.zend.php.zendserver.deployment.ui.editors; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.forms.IDetailsPage; import org.eclipse.ui.forms.IFormPart; import org.zend.php.zendserver.deployment.core.descriptor.DeploymentDescriptorFactory; import org.zend.php.zendserver.deployment.core.descriptor.IDeploymentDescriptor; import org.zend.php.zendserver.deployment.core.descriptor.IModelObject; import org.zend.php.zendserver.deployment.core.internal.descriptor.Feature; import org.zend.php.zendserver.deployment.ui.editors.DescriptorEditorPage.FormDecoration; public abstract class DescriptorDetailsPage implements IDetailsPage { protected FieldsContainer fields = new FieldsContainer(); protected IModelObject input; protected DeploymentDescriptorEditor editor; public DescriptorDetailsPage(DeploymentDescriptorEditor editor) { this.editor = editor; } public void showMarkers() { if (input == null) { return; } IDeploymentDescriptor imc = editor.getModel(); int index = -1; if (imc != null) { Feature f = DeploymentDescriptorFactory.getFeature(input); index = imc.getChildren(f).indexOf(input); } List<Feature> properties = Arrays.asList(input.getPropertyNames()); Map<Feature, FormDecoration> decorations = null; if (index != -1) { decorations = editor.getDecorationsForFeatures(properties, index); } else { decorations = editor.getDecorationsForFeatures(properties); } List<Feature> toRemove = new ArrayList<Feature>(properties); toRemove.removeAll(decorations.keySet()); fields.refreshMarkers(decorations, toRemove); } public void selectionChanged(IFormPart part, ISelection selection) { IStructuredSelection ssel = (IStructuredSelection)selection; if (ssel.size()==1) { input = (IModelObject)ssel.getFirstElement(); } else input = null; fields.setInput(input); refresh(); } public void refresh() { fields.refresh(); showMarkers(); } public void setFocus() { fields.fields().iterator().next().setFocus(); } }