|
From: <dc...@us...> - 2002-09-08 15:22:28
|
Update of /cvsroot/xmlceclipse/net.sourceforge.xmlceclipse.core/src/net/sourceforge/xmlceclipse/ui/properties
In directory usw-pr-cvs1:/tmp/cvs-serv19441/src/net/sourceforge/xmlceclipse/ui/properties
Added Files:
Widget.java EnabledWidget.java SourceFolderList.java
DomFactory.java JavaSourceFolder.java TextWidget.java
PackagePrefix.java ClassNameTemplate.java
ProjectPropertyPage.java Parser.java
Log Message:
Capabilities where deprecated, at least for a while
--- NEW FILE: Widget.java ---
package net.sourceforge.xmlceclipse.ui.properties;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import net.sourceforge.xmlceclipse.core.XmlcProperties;
import org.eclipse.swt.widgets.Composite;
/**
* @author dcorbin
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
abstract class Widget
{
public interface ChangeListener
{
public void changed();
}
List listeners = new ArrayList();
public void addListener(ChangeListener listener)
{
listeners.add(listener);
}
protected void changed()
{
for (Iterator i = listeners.iterator(); i.hasNext();)
{
ChangeListener listener = (ChangeListener) i.next();
listener.changed();
}
}
abstract void createControl(Composite parent);
abstract void populate(XmlcProperties properties);
abstract void setEnabled(boolean b);
abstract void extract(XmlcProperties properties);
abstract boolean isOk();
}
--- NEW FILE: EnabledWidget.java ---
package net.sourceforge.xmlceclipse.ui.properties;
import net.sourceforge.xmlceclipse.core.XmlcNature;
import net.sourceforge.xmlceclipse.core.XmlcProperties;
import net.sourceforge.xmlceclipse.core.XmlceclipsePlugin;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import sun.security.krb5.internal.crypto.e;
/**
* @author dcorbin
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
class EnabledWidget extends Widget
{
IProject project;
Button button;
public EnabledWidget(IProject project)
{
this.project = project;
}
/**
* @see net.sourceforge.xmlceclipse.ui.Widget#createControl(Composite)
*/
void createControl(Composite parent)
{
button = new Button(parent, SWT.CHECK);
button.setText("Enable XML Compiler");
GridData checkboxGridData = new GridData();
checkboxGridData.horizontalSpan = 3;
button.setLayoutData(checkboxGridData);
button.addSelectionListener(new SelectionListener()
{
public void widgetDefaultSelected(SelectionEvent e)
{
throw new RuntimeException("Not yet supported");
}
public void widgetSelected(SelectionEvent e)
{
changed();
}
});
}
/**
* @see net.sourceforge.xmlceclipse.ui.Widget#populate(XmlcProperties)
*/
void populate(XmlcProperties properties)
{
try
{
button.setSelection(project.hasNature(XmlcNature.NATURE_ID));
}
catch(CoreException e)
{
XmlceclipsePlugin.getDefault().getLog().log(e.getStatus());
}
}
/**
* @see net.sourceforge.xmlceclipse.ui.Widget#setEnabled(boolean)
*/
void setEnabled(boolean b)
{
button.setEnabled(true);
}
/**
* @see net.sourceforge.xmlceclipse.ui.Widget#extract(XmlcProperties)
*/
void extract(XmlcProperties properties)
{
}
/**
* @see net.sourceforge.xmlceclipse.ui.Widget#isOk()
*/
boolean isOk()
{
return true;
}
public boolean getSelection() { return button.getSelection(); }
}
--- NEW FILE: SourceFolderList.java ---
package net.sourceforge.xmlceclipse.ui.properties;
import java.util.Iterator;
import net.sourceforge.xmlceclipse.core.XmlcProperties;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
/**
* @author dcorbin
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
class SourceFolderList extends Widget
{
private Composite buttonStack;
private Button newFolderButton;
private Button removeFolderButton;
private List srcFolderList;
private Label srcDirLabel;
private static int GRID_COLUMNS=3;
private IProject project;
public SourceFolderList(IProject project)
{
this.project = project;
}
private void createSourceList(Composite page)
{
srcDirLabel = new Label(page, SWT.NONE);
srcDirLabel.setText("Source Directories:");
GridData labelData = new GridData();
labelData.horizontalSpan = GRID_COLUMNS;
srcDirLabel.setLayoutData(labelData);
srcFolderList = new List(page, SWT.SINGLE | SWT.V_SCROLL | SWT.BORDER);
srcFolderList.addSelectionListener(new SelectionListener()
{
public void widgetDefaultSelected(SelectionEvent e)
{
throw new RuntimeException("Not yet supported");
}
public void widgetSelected(SelectionEvent e)
{
changed();
}
});
}
private Button createButton(Composite parent, String label)
{
Button button = new Button(parent, SWT.PUSH);
button.setText(label);
GridData data = new GridData(GridData.FILL_HORIZONTAL);
button.setLayoutData(data);
return button;
}
private void buildButtonStack(final Composite page)
{
buttonStack = new Composite(page, SWT.NONE);
GridData buttonStackData = new GridData(GridData.FILL_VERTICAL);
buttonStackData.verticalAlignment = GridData.BEGINNING;
buttonStack.setLayoutData(buttonStackData);
GridLayout buttonStackLayout = new GridLayout(1, true);
buttonStack.setLayout(buttonStackLayout);
buttonStackLayout.marginWidth = 0;
newFolderButton = createButton(buttonStack, "Add Folder...");
newFolderButton.addSelectionListener(new SelectionAdapter()
{
public void widgetDefatulSelected(SelectionEvent e)
{
throw new RuntimeException("Not yet supported");
}
public void widgetSelected(SelectionEvent e)
{
InputDialog dlg = new InputDialog(page.getParent().getShell(), "Add XML Compiler Source folder", "", "", new FolderValidator("Source Folder"));
if (dlg.open() == dlg.OK)
{
srcFolderList.add(dlg.getValue());
changed();
}
}
});
new Label(buttonStack, SWT.NONE);
removeFolderButton = createButton(buttonStack, "Remove");
removeFolderButton.addSelectionListener(new SelectionAdapter()
{
public void widgetDefatulSelected(SelectionEvent e)
{
throw new RuntimeException("Not yet supported");
}
public void widgetSelected(SelectionEvent e)
{
int[] indices = srcFolderList.getSelectionIndices();
srcFolderList.remove(indices);
changed();
}
});
}
public class FolderValidator implements IInputValidator
{
String subject = "";
public FolderValidator(String subject)
{
this.subject = subject;
}
public String isValid(String newText)
{
IPath path = new Path(newText);
if (path.segmentCount() == 0)
return null;
if (path.segment(0).equals(project.getName()))
{
return null;
}
return subject + " must begin with the project name (" + project.getName() + ")";
}
}
/**
* @see net.sourceforge.xmlceclipse.ui.Widget#createControl(Composite)
*/
void createControl(Composite parent)
{
createSourceList(parent);
buildButtonStack(parent);
GridData listData = new GridData(GridData.FILL_BOTH);
listData.horizontalSpan = GRID_COLUMNS - 1;
srcFolderList.setLayoutData(listData);
}
/**
* @see net.sourceforge.xmlceclipse.ui.Widget#populate(XmlcProperties)
*/
void populate(XmlcProperties properties)
{
java.util.List list = properties.getSourceFolders();
for (Iterator i = list.iterator(); i.hasNext();)
{
String folder = (String) i.next();
srcFolderList.add(folder);
}
}
/**
* @see net.sourceforge.xmlceclipse.ui.Widget#setEnabled(boolean)
*/
void setEnabled(boolean b)
{
}
/**
* @see net.sourceforge.xmlceclipse.ui.Widget#extract(XmlcProperties)
*/
void extract(XmlcProperties properties)
{
String[] folders = srcFolderList.getItems();
properties.setSourceFolders(folders);
}
/**
* @see net.sourceforge.xmlceclipse.ui.Widget#isOk()
*/
boolean isOk()
{
return srcFolderList.getItemCount() > 0;
}
}
--- NEW FILE: DomFactory.java ---
package net.sourceforge.xmlceclipse.ui.properties;
import net.sourceforge.xmlceclipse.core.XmlcProperties;
/**
* @author dcorbin
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
class DomFactory extends TextWidget
{
/**
* @see net.sourceforge.xmlceclipse.ui.properties.TextWidget#label()
*/
protected String label()
{
return "DOM Factory class";
}
/**
* @see net.sourceforge.xmlceclipse.ui.properties.Widget#populate(XmlcProperties)
*/
void populate(XmlcProperties properties)
{
text.setText(properties.getDomFactory());
}
/**
* @see net.sourceforge.xmlceclipse.ui.properties.Widget#extract(XmlcProperties)
*/
void extract(XmlcProperties properties)
{
properties.setDomFactory(text.getText());
}
}
--- NEW FILE: JavaSourceFolder.java ---
package net.sourceforge.xmlceclipse.ui.properties;
import net.sourceforge.xmlceclipse.core.XmlcProperties;
/**
* @author dcorbin
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
class JavaSourceFolder extends TextWidget
{
/**
* @see net.sourceforge.xmlceclipse.ui.TextWidget#label()
*/
protected String label()
{
return "&Java Source Folder";
}
/**
* @see net.sourceforge.xmlceclipse.ui.Widget#populate(XmlcProperties)
*/
public void populate(XmlcProperties properties)
{
text.setText(properties.getJavaSourceFolder());
}
/**
* @see net.sourceforge.xmlceclipse.ui.Widget#extract(XmlcProperties)
*/
public void extract(XmlcProperties properties)
{
properties.setJavaSourceFolder(text.getText());
}
}
--- NEW FILE: TextWidget.java ---
package net.sourceforge.xmlceclipse.ui.properties;
import net.sourceforge.xmlceclipse.core.XmlcProperties;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
/**
* @author dcorbin
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
abstract class TextWidget extends Widget
{
protected Label label;
protected Text text;
/**
* @see net.sourceforge.xmlceclipse.ui.Widget#createControl(Composite)
*/
public void createControl(Composite parent)
{
createLabeledTextBox(parent,label(), true);
}
abstract protected String label();
/**
* @see net.sourceforge.xmlceclipse.ui.Widget#setEnabled(boolean)
*/
public void setEnabled(boolean b)
{
label.setEnabled(b);
text.setEnabled(b);
}
private Text createLabeledTextBox(Composite parent, String labelText, boolean filler)
{
label = new Label(parent, SWT.NONE);
label.setText(labelText);
text = new Text(parent, SWT.SINGLE | SWT.BORDER);
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.widthHint = 300;
text.setLayoutData(gridData);
text.addModifyListener(new ModifyListener()
{
public void modifyText(ModifyEvent event)
{
changed();
}
});
if (filler)
new Label(parent, SWT.NONE);
return text;
}
public boolean isOk()
{
return text.getText().length() > 0;
}
}
--- NEW FILE: PackagePrefix.java ---
package net.sourceforge.xmlceclipse.ui.properties;
import net.sourceforge.xmlceclipse.core.XmlcProperties;
/**
* @author dcorbin
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
class PackagePrefix extends TextWidget
{
protected String label()
{
return "&Package Prefix:";
}
/**
* @see net.sourceforge.xmlceclipse.ui.Widget#populate(XmlcProperties)
*/
public void populate(XmlcProperties properties)
{
text.setText(properties.getPackagePrefix());
}
/**
* @see net.sourceforge.xmlceclipse.ui.Widget#extract(XmlcProperties)
*/
public void extract(XmlcProperties properties)
{
properties.setPackagePrefix(text.getText());
}
}
--- NEW FILE: ClassNameTemplate.java ---
package net.sourceforge.xmlceclipse.ui.properties;
import net.sourceforge.xmlceclipse.core.XmlcProperties;
/**
* @author dcorbin
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public class ClassNameTemplate extends TextWidget
{
/**
* @see net.sourceforge.xmlceclipse.ui.TextWidget#label()
*/
protected String label()
{
return "Class Name Template";
}
/**
* @see net.sourceforge.xmlceclipse.ui.Widget#populate(XmlcProperties)
*/
public void populate(XmlcProperties properties)
{
text.setText(properties.getClassNameTemplate());
}
/**
* @see net.sourceforge.xmlceclipse.ui.Widget#extract(XmlcProperties)
*/
public void extract(XmlcProperties properties)
{
properties.setClassNameTemplate(text.getText());
}
}
--- NEW FILE: ProjectPropertyPage.java ---
/*
* Copyright (c) 2002 David Corbin and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU General Public License v2
* which accompanies this distribution, and is available at
* http://www.gnu.org/copyleft/gpl.html
*
* Contributors:
* David Corbin - Initial implementation.
*/
package net.sourceforge.xmlceclipse.ui.properties;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import net.sourceforge.xmlceclipse.core.XmlcNature;
import net.sourceforge.xmlceclipse.core.XmlcProperties;
import net.sourceforge.xmlceclipse.core.XmlceclipsePlugin;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.eclipse.ui.dialogs.ContainerSelectionDialog;
import org.eclipse.ui.dialogs.PropertyPage;
/**
* @author dcorbin
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public class ProjectPropertyPage extends PropertyPage implements IWorkbenchPropertyPage
{
XmlcProperties properties;
private EnabledWidget enabledWidget;;
private Composite page;
private Collection widgets = new ArrayList();
private boolean canLeave = false;
public boolean okToLeave()
{
return canLeave;
}
private void setControlStatus()
{
if (!update)
return;
boolean enabled = enabledWidget.getSelection();
for (Iterator i = widgets.iterator(); i.hasNext();)
{
Widget widget = (Widget) i.next();
widget.setEnabled(enabled);
}
canLeave = true;
if (enabled)
{
for (Iterator i = widgets.iterator(); canLeave && i.hasNext();)
{
Widget widget = (Widget) i.next();
canLeave = canLeave && widget.isOk();
}
}
setValid(canLeave);
}
private boolean update = true;
/**
* @see org.eclipse.jface.preference.PreferencePage#createContents(Composite)
*/
final static public int GRID_COLUMNS = 3;
protected Control createContents(final Composite parent)
{
IAdaptable adaptable = getElement();
IResource resource = (IResource)adaptable.getAdapter(IResource.class);
properties = XmlceclipsePlugin.getDefault().getProperties(resource);
page = new Composite(parent, SWT.NONE);
GridLayout pageLayout = new GridLayout(GRID_COLUMNS, false);
page.setLayout(pageLayout);
widgets.add( enabledWidget = new EnabledWidget(getProject()));
widgets.add (new SourceFolderList(getProject()));
widgets.add (new JavaSourceFolder());
widgets.add (new ClassNameTemplate());
widgets.add (new PackagePrefix());
widgets.add (new Parser());
widgets.add (new DomFactory());
for (Iterator i = widgets.iterator(); i.hasNext();)
{
Widget widget = (Widget) i.next();
widget.createControl(page);
widget.populate(properties);
}
Widget.ChangeListener changeListener = new Widget.ChangeListener()
{
public void changed()
{
setControlStatus();
}
};
for (Iterator i = widgets.iterator(); i.hasNext();)
{
Widget widget = (Widget) i.next();
widget.addListener(changeListener);
}
page.layout();
setControlStatus();
return page;
}
private IProject getProject()
{
return (IProject) getElement().getAdapter(IProject.class);
}
/**
* @see org.eclipse.jface.preference.IPreferencePage#performOk()
*/
public boolean performOk()
{
try
{
if (enabledWidget.getSelection() != getProject().hasNature(XmlcNature.NATURE_ID))
{
if (enabledWidget.getSelection())
XmlcNature.addNatureToProject(getProject());
else
XmlcNature.removeNatureFromProject(getProject());
}
if (enabledWidget.getSelection())
{
for (Iterator i = widgets.iterator(); i.hasNext();)
{
Widget widget = (Widget) i.next();
widget.extract(properties);
}
}
else
{
properties.setSourceFolders(null);
properties.setJavaSourceFolder(null);
properties.setPackagePrefix(null);
properties.setClassNameTemplate(null);
}
XmlceclipsePlugin.getDefault().storeProperties(
(IResource)getElement().getAdapter(IResource.class),properties);
return super.performOk();
}
catch (CoreException ce)
{
ErrorDialog.openError(null, "Error saving XMLC properties for project", ce.getMessage(), ce.getStatus());
return false;
}
}
}
--- NEW FILE: Parser.java ---
package net.sourceforge.xmlceclipse.ui.properties;
import net.sourceforge.xmlceclipse.core.XmlcProperties;
/**
* @author dcorbin
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
class Parser extends TextWidget
{
/**
* @see net.sourceforge.xmlceclipse.ui.properties.TextWidget#label()
*/
protected String label()
{
return "Markup Language Parser";
}
/**
* @see net.sourceforge.xmlceclipse.ui.properties.Widget#populate(XmlcProperties)
*/
void populate(XmlcProperties properties)
{
text.setText(properties.getMarkupLanguageParser());
}
/**
* @see net.sourceforge.xmlceclipse.ui.properties.Widget#extract(XmlcProperties)
*/
void extract(XmlcProperties properties)
{
properties.setMarkupLanguageParser(text.getText());
}
public boolean isOk()
{
if (super.isOk())
{
String parser = text.getText();
return "xerces".equals(parser)
|| "jtidy".equals(parser)
|| "swing".equals(parser);
}
return false;
}
}
|