1 /*******************************************************************************
\r
2 * Copyright (c) 2006 Sybase, Inc. and others.
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * Sybase, Inc. - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.eclipse.jst.pagedesigner.properties;
\r
14 import org.eclipse.core.resources.IFile;
\r
15 import org.eclipse.core.resources.IProject;
\r
16 import org.eclipse.core.runtime.IStatus;
\r
17 import org.eclipse.core.runtime.Status;
\r
18 import org.eclipse.jface.action.IStatusLineManager;
\r
19 import org.eclipse.jface.viewers.ISelection;
\r
20 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.StatusUtil;
\r
21 import org.eclipse.jst.pagedesigner.PDPlugin;
\r
22 import org.eclipse.swt.widgets.Composite;
\r
23 import org.eclipse.ui.IActionBars;
\r
24 import org.eclipse.ui.IEditorInput;
\r
25 import org.eclipse.ui.IFileEditorInput;
\r
26 import org.eclipse.ui.IWorkbenchPart;
\r
27 import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
\r
28 import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
\r
29 import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter;
\r
30 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
\r
31 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
\r
32 import org.w3c.dom.Node;
\r
37 public abstract class BaseCustomSection extends AbstractPropertySection {
\r
40 * Status that all is OK
\r
42 protected static final Status OKSTATUS = new Status(IStatus.OK, PDPlugin
\r
43 .getPluginId(), 0, "", null); //$NON-NLS-1$
\r
45 private WPETabbedPropertySheetPage _propertySheetPage;
\r
47 private boolean _visible = false;
\r
50 * the tag IDOMElement
\r
52 protected IDOMElement _element;
\r
55 * the INodeAdapter used to receive notifications of model updates
\r
57 protected INodeAdapter _adapter = new INodeAdapter() {
\r
58 public boolean isAdapterForType(Object type) {
\r
62 public void notifyChanged(INodeNotifier notifier, int eventType,
\r
63 Object changedFeature, Object oldValue, Object newValue, int pos) {
\r
64 BaseCustomSection.this.notifyChanged(notifier, eventType,
\r
65 changedFeature, oldValue, newValue, pos);
\r
69 public void setInput(IWorkbenchPart part, ISelection selection) {
\r
70 super.setInput(part, selection);
\r
71 IDOMElement newEle = (IDOMElement) DesignerPropertyTool.getElement(
\r
73 if (_element != newEle) {
\r
74 if (_element != null) {
\r
75 _element.removeAdapter(_adapter);
\r
78 if (_element != null) {
\r
79 _element.addAdapter(_adapter);
\r
85 * Method adapter will call when element has changed
\r
89 * @param changedFeature
\r
94 protected abstract void notifyChanged(INodeNotifier notifier,
\r
95 int eventType, Object changedFeature, Object oldValue,
\r
96 Object newValue, int pos);
\r
98 public void createControls(Composite parent,
\r
99 TabbedPropertySheetPage aTabbedPropertySheetPage) {
\r
100 super.createControls(parent, aTabbedPropertySheetPage);
\r
101 _propertySheetPage = (WPETabbedPropertySheetPage) aTabbedPropertySheetPage;
\r
105 * for certain action performed in the section, may result big change in the
\r
106 * model. e.g: change tag name will result in editpart recreate. In this
\r
107 * case, we need do a total refresh.
\r
110 protected void refreshPropertySheetPage() {
\r
111 if (_propertySheetPage != null) {
\r
112 IWorkbenchPart part = getPart();
\r
113 if (part != null) {
\r
114 ISelection sel = part.getSite().getSelectionProvider()
\r
116 _propertySheetPage.selectionChanged(part, sel);
\r
118 // XXX: will else happen?
\r
119 System.out.println("AbstractCustomSection --> What to do?"); //$NON-NLS-1$
\r
128 protected void gotoNode(Node node) {
\r
129 _propertySheetPage.internalChangeSelection(node, node);
\r
133 * @return IStatusLineManager to use for the property sheet page
\r
135 protected IStatusLineManager getStatusLineManager() {
\r
136 if (_propertySheetPage != null) {
\r
137 IActionBars bar = _propertySheetPage.getSite().getActionBars();
\r
139 return bar.getStatusLineManager();
\r
146 * @param status to display on status line
\r
148 protected void applyStatus(IStatus[] status) {
\r
153 IStatusLineManager statusLine = getStatusLineManager();
\r
154 if (statusLine == null) {
\r
159 if (status == null || status.length == 0) {
\r
162 s = StatusUtil.getMostSevere(status);
\r
165 if (s == null || s.getSeverity() != IStatus.ERROR) {
\r
166 statusLine.setErrorMessage(null);
\r
168 statusLine.setErrorMessage(s.getMessage());
\r
175 protected void setErrorMessage(String message) {
\r
176 IStatusLineManager s = getStatusLineManager();
\r
178 s.setErrorMessage(message);
\r
186 protected Status createErrorStatus(String message) {
\r
187 return new Status(IStatus.ERROR, PDPlugin.getPluginId(), 0, message,
\r
191 public void aboutToBeHidden() {
\r
194 // IDOMElement newEle = (IDOMElement) DesignerPropertyTool.getElement(
\r
195 // part, selection);
\r
196 // if (_element != newEle) {
\r
197 if (_element != null) {
\r
198 _element.removeAdapter(_adapter);
\r
200 // _element = newEle;
\r
201 // if (_element != null) {
\r
202 // _element.addAdapter(_adapter);
\r
205 super.aboutToBeHidden();
\r
208 public void aboutToBeShown() {
\r
209 super.aboutToBeShown();
\r
210 // IDOMElement newEle = (IDOMElement) DesignerPropertyTool.getElement(
\r
211 // part, selection);
\r
212 // if (_element != newEle) {
\r
213 // if (_element != null) {
\r
214 // _element.removeAdapter(_adapter);
\r
216 // _element = newEle;
\r
217 if (_element != null) {
\r
218 _element.addAdapter(_adapter);
\r
225 * @return IProject for the WPE editing instance
\r
227 protected IProject getProject() {
\r
228 if (_propertySheetPage != null) {
\r
229 IEditorInput input = _propertySheetPage.getEditor()
\r
231 if (input instanceof IFileEditorInput) {
\r
232 return ((IFileEditorInput) input).getFile().getProject();
\r
238 public void dispose() {
\r
240 if (_element != null) {
\r
241 _element.removeAdapter(_adapter);
\r
246 * @return IFile for WPE editing instance
\r
248 protected IFile getFile() {
\r
249 if (_propertySheetPage != null) {
\r
250 IEditorInput input = _propertySheetPage.getEditor()
\r
252 if (input instanceof IFileEditorInput) {
\r
253 return ((IFileEditorInput) input).getFile();
\r