[jboss-cvs] jbosside/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/preferencepages ...
Robert Stryker
rawblem at gmail.com
Thu Jul 27 02:34:01 EDT 2006
User: rawb
Date: 06/07/27 02:34:01
Added: as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/preferencepages
ViewPreferencePage.java
JBossServersPreferencePage.java
ViewProviderPreferenceComposite.java
Log:
Implemented xpath editor in properties view. Other changes made to fascilitate this implementation (added to DescriptorModel, etc). Also fixed bugs, re-added classpath to server configuration so user can customize.
Revision Changes Path
1.1 date: 2006/07/27 06:34:01; author: rawb; state: Exp;jbosside/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/preferencepages/ViewPreferencePage.java
Index: ViewPreferencePage.java
===================================================================
package org.jboss.ide.eclipse.as.ui.preferencepages;
import java.util.ArrayList;
import java.util.HashMap;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.custom.TableEditor;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.part.PageBook;
import org.jboss.ide.eclipse.as.core.util.ASDebug;
import org.jboss.ide.eclipse.as.ui.JBossServerUIPlugin;
import org.jboss.ide.eclipse.as.ui.JBossServerUIPlugin.ServerViewProvider;
import org.jboss.ide.eclipse.as.ui.views.JBossServerView;
public class ViewPreferencePage extends PreferencePage implements
IWorkbenchPreferencePage {
private static final String ENABLED = "_ENABLED_";
private static final String WEIGHT = "_WEIGHT_";
private Table table;
private HashMap providerToGroup;
private ArrayList preferenceComposites;
private PageBook book;
ServerViewProvider[] providers;
public ViewPreferencePage() {
providerToGroup = new HashMap();
preferenceComposites = new ArrayList();
}
public ViewPreferencePage(String title) {
super(title);
}
public ViewPreferencePage(String title, ImageDescriptor image) {
super(title, image);
}
public boolean isValid() {
ViewProviderPreferenceComposite comp;
for( int i = 0; i < preferenceComposites.size(); i++ ) {
comp = (ViewProviderPreferenceComposite)preferenceComposites.get(i);
if( !comp.isValid()) return false;
}
return true;
}
public boolean performOk() {
// first set whether they're enabled
TableItem[] items = table.getItems();
for( int i = 0; i < items.length; i++ ) {
ServerViewProvider provider = (ServerViewProvider)items[i].getData();
Boolean bigB = ((Boolean)items[i].getData(ENABLED));
if( bigB != null )
provider.setEnabled(bigB.booleanValue());
Integer weight = ((Integer)items[i].getData(WEIGHT));
if( weight != null )
provider.setWeight(weight.intValue());
}
// now let the composites save their preferences
ViewProviderPreferenceComposite comp;
boolean retval = true;
for( int i = 0; i < preferenceComposites.size(); i++ ) {
comp = (ViewProviderPreferenceComposite)preferenceComposites.get(i);
retval = retval && comp.performOk();
}
// refresh the viewer
JBossServerView.getDefault().refreshJBTree(null);
return retval;
}
protected Control createContents(Composite p) {
providerToGroup = new HashMap();
Composite c = new Composite(p, SWT.NONE);
c.setLayout(new FormLayout());
addEnablementComposite(c);
addExtensionPreferencePages(c);
addListeners();
return c;
}
protected void addListeners() {
table.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
}
public void widgetSelected(SelectionEvent e) {
try {
TableItem item = (table.getSelection())[0];
Object o = item.getData();
if( o != null && o instanceof ServerViewProvider) {
Group g = (Group)providerToGroup.get(((ServerViewProvider)o));
book.showPage(g);
}
} catch( Exception ex ) {
}
}
});
}
protected void addEnablementComposite(Composite parent) {
table = new Table(parent, SWT.BORDER);
FormData tableData = new FormData();
tableData.left = new FormAttachment(0,5);
tableData.right = new FormAttachment(100, -5);
tableData.top = new FormAttachment(0,5);
tableData.bottom = new FormAttachment(40,0);
table.setLayoutData(tableData);
table.setHeaderVisible(true);
table.setLinesVisible(false);
TableColumn column0 = new TableColumn(table, SWT.NONE);
column0.setText("Name");
TableColumn column1 = new TableColumn(table, SWT.NONE);
column1.setText("Enabled");
TableColumn column2 = new TableColumn(table, SWT.NONE);
column2.setText("Weight");
TableColumn column3 = new TableColumn(table, SWT.NONE);
column3.setText("Description");
providers = JBossServerUIPlugin.getDefault().getAllServerViewProviders();
int minWidth = 0;
for (int i = 0; i < providers.length; i++) {
final TableItem item = new TableItem(table, SWT.NONE);
// keep the object in the data
item.setData(providers[i]);
item.setText(new String[] {providers[i].getName(), "", "", providers[i].getDescription()});
item.setImage(providers[i].getImage());
final Button b = new Button(table, SWT.CHECK);
b.setSelection(providers[i].isEnabled());
b.pack();
TableEditor editor = new TableEditor(table);
Point size = b.computeSize(SWT.DEFAULT, SWT.DEFAULT);
editor.minimumWidth = size.x;
minWidth = Math.max(size.x, minWidth);
editor.minimumHeight = size.y;
editor.horizontalAlignment = SWT.CENTER;
editor.verticalAlignment = SWT.CENTER;
editor.setEditor(b, item , 1);
b.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
}
public void widgetSelected(SelectionEvent e) {
item.setData(ENABLED, new Boolean(b.getSelection()));
}
});
TableEditor editor2 = new TableEditor(table);
final Spinner s = new Spinner(table, SWT.NONE);
s.setMaximum(50);
s.setMinimum(0);
s.setIncrement(1);
s.setSelection(providers[i].getWeight());
Point size2 = s.computeSize(SWT.DEFAULT, SWT.DEFAULT);
editor2.minimumWidth = size2.x;
minWidth = Math.max(size2.x, minWidth);
editor2.minimumHeight = size2.y;
editor2.horizontalAlignment = SWT.RIGHT;
editor2.verticalAlignment = SWT.CENTER;
editor2.setEditor(s, item , 2);
s.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
item.setData(WEIGHT, new Integer(s.getSelection()));
}
});
}
column0.pack();
column1.pack();
column1.setWidth(column1.getWidth() + minWidth);
column2.pack();
column2.setWidth(column2.getWidth() + minWidth);
column3.pack();
column3.setWidth(column3.getWidth() + minWidth);
}
protected void addExtensionPreferencePages(Composite parent) {
ScrolledComposite sc = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL);
FormData scData = new FormData();
scData.left = new FormAttachment(0,5);
scData.top = new FormAttachment(45, 0);
scData.right = new FormAttachment(100, -5);
scData.bottom = new FormAttachment(100, -5);
sc.setLayoutData(scData);
Composite sub = new Composite(sc, SWT.NONE);
sc.setContent(sub);
sub.setLayout(new FillLayout());
book = new PageBook(sub, SWT.NONE);
ServerViewProvider[] providers = JBossServerUIPlugin.getDefault().getAllServerViewProviders();
for( int i = 0; i < providers.length; i++ ) {
Group g = new Group(book, SWT.NONE);
g.setText(providers[i].getName() + " Preferences");
g.setLayout(new FillLayout());
ViewProviderPreferenceComposite c =
providers[i].getDelegate().createPreferenceComposite(g, SWT.NONE);
if( c != null ) preferenceComposites.add(c);
providerToGroup.put(providers[i], g);
}
// force a layout
sub.pack();
//sub.layout();
int locY = sub.getLocation().y;
int locX = sub.getLocation().x;
int sY = sub.getSize().y;
int sX = sub.getSize().x;
sc.setExpandHorizontal(true);
sc.setExpandVertical(true);
sc.setMinHeight(locY + sY);
sc.setMinWidth(locX + sX);
}
protected class EnablementComposite extends Composite {
private ServerViewProvider myProvider;
public EnablementComposite(Composite parent, ServerViewProvider provider ) {
super(parent, SWT.NONE);
myProvider = provider;
setLayout(new FormLayout());
Button enabled = new Button(this, SWT.CHECK);
enabled.setText("Enabled");
enabled.setSelection(provider.isEnabled());
}
}
public void init(IWorkbench workbench) {
}
}
1.1 date: 2006/07/27 06:34:01; author: rawb; state: Exp;jbosside/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/preferencepages/JBossServersPreferencePage.java
Index: JBossServersPreferencePage.java
===================================================================
package org.jboss.ide.eclipse.as.ui.preferencepages;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import org.dom4j.Node;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.TreeEditor;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.wst.server.core.IServerWorkingCopy;
import org.eclipse.wst.server.core.internal.ServerType;
import org.eclipse.wst.server.ui.ServerUICore;
import org.jboss.ide.eclipse.as.core.JBossServerCore;
import org.jboss.ide.eclipse.as.core.model.SimpleTreeItem;
import org.jboss.ide.eclipse.as.core.model.DescriptorModel.ServerDescriptorModel.XPathTreeItem;
import org.jboss.ide.eclipse.as.core.model.DescriptorModel.ServerDescriptorModel.XPathTreeItem2;
import org.jboss.ide.eclipse.as.core.server.JBossServer;
import org.jboss.ide.eclipse.as.core.server.ServerAttributeHelper;
import org.jboss.ide.eclipse.as.core.server.ServerAttributeHelper.SimpleXPathPreferenceTreeItem;
import org.jboss.ide.eclipse.as.core.server.ServerAttributeHelper.XPathPreferenceTreeItem;
import org.jboss.ide.eclipse.as.ui.dialogs.XPathDialogs.XPathCategoryDialog;
import org.jboss.ide.eclipse.as.ui.dialogs.XPathDialogs.XPathDialog;
public class JBossServersPreferencePage extends PreferencePage implements
IWorkbenchPreferencePage {
public JBossServersPreferencePage() {
super();
}
public JBossServersPreferencePage(String title) {
super(title);
}
public JBossServersPreferencePage(String title, ImageDescriptor image) {
super(title, image);
}
protected Control createContents(Composite parent) {
Composite main = new Composite(parent, SWT.BORDER);
main.setLayout(new FormLayout());
createServerViewer(main);
createTimeoutGroup(main);
addListeners();
// minimum width enforcer
Label l = new Label(main, SWT.NONE);
FormData lData = new FormData();
lData.left = new FormAttachment(0,0);
lData.right = new FormAttachment(0,600);
lData.bottom = new FormAttachment(100,0);
lData.top = new FormAttachment(100,0);
l.setLayoutData(lData);
main.layout();
return main;
}
private JBossServer currentServer;
private Group timeoutGroup;
private Table serverTable;
private TableViewer serverTableViewer;
private Spinner stopSpinner, startSpinner;
private HashMap workingCoppies;
private Action newXPathCategoryAction, newXPathAction, deleteXPathCategoryAction,
deleteXPathAction, editXPathAction;
// where the page fold is
int pageColumn = 55;
protected void createServerViewer(Composite main) {
workingCoppies = new HashMap();
serverTable = new Table(main, SWT.BORDER);
FormData lData = new FormData();
lData.left = new FormAttachment(0,5);
lData.right = new FormAttachment(pageColumn-2,0);
lData.top = new FormAttachment(0,5);
lData.bottom = new FormAttachment(0,80);
serverTable.setLayoutData(lData);
serverTableViewer = new TableViewer(serverTable);
serverTableViewer.setContentProvider(new IStructuredContentProvider() {
public Object[] getElements(Object inputElement) {
return JBossServerCore.getAllJBossServers();
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
});
serverTableViewer.setLabelProvider(new ITableLabelProvider() {
public Image getColumnImage(Object element, int columnIndex) {
if( element instanceof JBossServer ) {
return ServerUICore.getLabelProvider().getImage(((JBossServer)element).getServer());
}
return null;
}
public String getColumnText(Object element, int columnIndex) {
if( element instanceof JBossServer ) return ((JBossServer)element).getServer().getName();
return element.toString();
}
public void addListener(ILabelProviderListener listener) {
}
public void dispose() {
}
public boolean isLabelProperty(Object element, String property) {
return false;
}
public void removeListener(ILabelProviderListener listener) {
}
});
serverTableViewer.setInput("");
}
protected void createTimeoutGroup(Composite main) {
timeoutGroup = new Group(main, SWT.NONE);
timeoutGroup.setText("Server Timeouts");
FormData groupData = new FormData();
groupData.right = new FormAttachment(100, -5);
groupData.left = new FormAttachment(pageColumn+2, 0);
groupData.top = new FormAttachment(0,5);
timeoutGroup.setLayoutData(groupData);
timeoutGroup.setLayout(new FormLayout());
// add two textboxes, two labels
Label startTimeoutLabel, stopTimeoutLabel;
startTimeoutLabel = new Label(timeoutGroup, SWT.NONE);
stopTimeoutLabel = new Label(timeoutGroup, SWT.NONE);
stopSpinner = new Spinner(timeoutGroup, SWT.BORDER);
startSpinner = new Spinner(timeoutGroup, SWT.BORDER);
FormData startTD = new FormData();
startTD.left = new FormAttachment(0,5);
startTD.top = new FormAttachment(0,5);
startTimeoutLabel.setLayoutData(startTD);
startTimeoutLabel.setText("Start Timeout");
FormData stopTD = new FormData();
stopTD.left = new FormAttachment(0,5);
stopTD.top = new FormAttachment(startSpinner,4);
stopTimeoutLabel.setLayoutData(stopTD);
stopTimeoutLabel.setText("Stop Timeout");
timeoutGroup.layout();
int startWidth = startTimeoutLabel.getSize().x;
int stopWidth = stopTimeoutLabel.getSize().x;
Label widest = startWidth > stopWidth ? startTimeoutLabel : stopTimeoutLabel;
FormData startD = new FormData();
startD.left = new FormAttachment(0,widest.getSize().x + widest.getLocation().x + 5);
startD.right = new FormAttachment(100, -5);
startD.top = new FormAttachment(0,5);
startSpinner.setLayoutData(startD);
FormData stopD = new FormData();
stopD.left = new FormAttachment(0,widest.getSize().x + widest.getLocation().x + 5);
stopD.right = new FormAttachment(100, -5);
stopD.top = new FormAttachment(startSpinner,5);
stopSpinner.setLayoutData(stopD);
stopSpinner.setMinimum(0);
startSpinner.setMinimum(0);
stopSpinner.setIncrement(1000);
startSpinner.setIncrement(1000);
}
private void addListeners() {
serverTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection sel = (IStructuredSelection)serverTableViewer.getSelection();
serverSelected(sel.getFirstElement() == null ? null : (JBossServer)sel.getFirstElement());
}
});
startSpinner.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
getSelectedWC().setStartTimeout(startSpinner.getSelection());
}
});
stopSpinner.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
getSelectedWC().setStopTimeout(stopSpinner.getSelection());
}
});
}
private void createActions() { }
/*
* newXPathCategoryAction, newXPathAction, deleteXPathCategoryAction,
deleteXPathAction, editXPathCategoryAction, editXPathAction;
}
private void addViewerMenus() {
MenuManager menuManager = new MenuManager("#PopupMenu");
menuManager.setRemoveAllWhenShown(true);
final Shell shell = xpathTree.getShell();
menuManager.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager mgr) {
xpathTreeMenuAboutToShow(shell, mgr);
}
});
Menu menu = menuManager.createContextMenu(xpathTree);
xpathTree.setMenu(menu);
}
private void xpathTreeMenuAboutToShow(Shell shell, IMenuManager menu) {
menu.add(newXPathCategoryAction);
menu.add(deleteXPathCategoryAction);
menu.add(newXPathAction);
menu.add(editXPathAction);
}
*/
private void serverSelected(JBossServer server) {
currentServer = server;
ServerAttributeHelper wcHelper = getWCHelper(server);
/* Handle spinners */
startSpinner.setMaximum(((ServerType)server.getServer().getServerType()).getStartTimeout());
stopSpinner.setMaximum(((ServerType)server.getServer().getServerType()).getStopTimeout());
startSpinner.setSelection(wcHelper.getStartTimeout());
stopSpinner.setSelection(wcHelper.getStopTimeout());
}
private ServerAttributeHelper getWCHelper(JBossServer server) {
if( workingCoppies.get(server) == null ) {
ServerAttributeHelper ret = server.getAttributeHelper();
workingCoppies.put(server, ret);
return ret;
}
return (ServerAttributeHelper)workingCoppies.get(server);
}
private ServerAttributeHelper getSelectedWC() {
IStructuredSelection sel = (IStructuredSelection)serverTableViewer.getSelection();
if( sel != null && sel.getFirstElement() != null ) {
return getWCHelper((JBossServer)sel.getFirstElement());
}
return null;
}
public void init(IWorkbench workbench) {
}
public Object getFirstSelected(Viewer viewer) {
ISelection sel = viewer.getSelection();
if( sel instanceof IStructuredSelection) {
Object o = ((IStructuredSelection)sel).getFirstElement();
return o;
}
return null;
}
public boolean performOk() {
super.performOk();
saveDirtyWorkingCoppies();
return true;
}
/* Saves the actual ServerWorkingCopy changes into the IServer it relates to. */
private void saveDirtyWorkingCoppies() {
Collection c = workingCoppies.values();
Iterator i = c.iterator();
Object o;
IServerWorkingCopy copy;
while(i.hasNext()) {
o = i.next();
if( o instanceof ServerAttributeHelper) {
copy = ((ServerAttributeHelper)o).getServer();
if( copy.isDirty()) {
try {
copy.save(true, new NullProgressMonitor());
} catch( CoreException ce) {
ce.printStackTrace();
}
}
}
}
}
public boolean performCancel() {
super.performCancel();
// get rid of dirty working coppies (no action needed)
return true;
}
}
1.1 date: 2006/07/27 06:34:01; author: rawb; state: Exp;jbosside/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/preferencepages/ViewProviderPreferenceComposite.java
Index: ViewProviderPreferenceComposite.java
===================================================================
package org.jboss.ide.eclipse.as.ui.preferencepages;
import org.eclipse.swt.widgets.Composite;
public abstract class ViewProviderPreferenceComposite extends Composite {
public ViewProviderPreferenceComposite(Composite parent, int style) {
super(parent, style);
}
public abstract boolean isValid();
public abstract boolean performOk();
public abstract boolean performCancel();
}
More information about the jboss-cvs-commits
mailing list